在日常的Java开发中,我们经常需要从集合中筛选出满足特定条件的数据。这种操作被称为Java过滤操作。随着Java 8引入Stream API和Lambda表达式,实现过滤变得异常简洁高效。本教程将手把手教你如何使用这些现代Java特性完成各种过滤任务,即使是编程新手也能轻松上手!
简单来说,Java过滤操作就是从一个数据集合(如List、Set等)中挑选出满足特定条件的元素,组成一个新的集合。例如:从学生列表中找出所有年龄大于18岁的学生,或从商品列表中筛选出价格低于100元的商品。
在Java 8之前,我们通常使用for循环配合if判断来实现过滤:
// 传统方式:使用for循环过滤List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);List<Integer> evenNumbers = new ArrayList<>();for (Integer num : numbers) { if (num % 2 == 0) { evenNumbers.add(num); }}System.out.println(evenNumbers); // 输出: [2, 4, 6, 8, 10] 而使用Java 8的Stream API,只需一行代码即可完成相同操作:
// Stream方式:使用filter方法List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);List<Integer> evenNumbers = numbers.stream() .filter(n -> n % 2 == 0) .collect(Collectors.toList());System.out.println(evenNumbers); // 输出: [2, 4, 6, 8, 10] 可以看到,Stream方式不仅代码更简洁,而且语义更清晰——“从numbers中过滤出偶数”。
filter() 是Stream接口中的一个中间操作,它接收一个 Predicate<T> 函数式接口作为参数。该接口的抽象方法为 boolean test(T t),用于判断元素是否满足条件。
常见用法示例:
List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");// 筛选出长度大于4的姓名List<String> longNames = names.stream() .filter(name -> name.length() > 4) .collect(Collectors.toList());System.out.println(longNames); // 输出: [Alice, Charlie] 假设我们有一个Student类:
class Student { private String name; private int age; public Student(String name, int age) { this.name = name; this.age = age; } // getter方法 public String getName() { return name; } public int getAge() { return age; } @Override public String toString() { return name + "(" + age + ")"; }} 现在我们要筛选出年龄大于等于18岁的学生:
List<Student> students = Arrays.asList( new Student("张三", 17), new Student("李四", 19), new Student("王五", 20), new Student("赵六", 16));List<Student> adults = students.stream() .filter(s -> s.getAge() >= 18) .collect(Collectors.toList());System.out.println(adults); // 输出: [李四(19), 王五(20)] 有时我们需要同时满足多个条件。可以链式调用多个filter(),也可以在一个filter()中使用逻辑运算符。
// 方式1:链式调用List<Student> result1 = students.stream() .filter(s -> s.getAge() >= 18) .filter(s -> s.getName().startsWith("李")) .collect(Collectors.toList());// 方式2:单个filter中组合条件List<Student> result2 = students.stream() .filter(s -> s.getAge() >= 18 && s.getName().startsWith("李")) .collect(Collectors.toList()); 通过本教程,你已经掌握了Java过滤操作的核心技能。无论是简单的数字筛选,还是复杂的对象条件判断,Stream API都能让你的代码更加优雅高效。记住关键点:stream().filter(条件).collect(...)。
希望这篇关于Java Stream过滤、Java集合过滤和Java条件筛选的教程对你有所帮助!快去你的项目中实践吧!
本文由主机测评网于2025-12-12发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025126895.html