Java 8中list.stream().filter方法的应用
1. 介绍
在Java 8中,新增了一种操作集合的方式——Stream流。Stream是一个用于描述元素序列的抽象概念,它可以让我们以一种声明式的方式对集合进行操作,提供了更加灵活和简洁的代码实现方式。
Stream提供了很多操作方法,其中一个常用的方法是filter
。这个方法可以根据指定的条件对流中的元素进行筛选,只返回满足条件的元素。
本文将详细介绍Java 8中list.stream().filter
方法的使用方式和示例代码。
2. filter
方法的定义
filter
方法是Stream接口中的一个默认方法,其定义如下:
Stream<T> filter(Predicate<? super T> predicate)
从定义可以看出,filter
方法的参数是一个Predicate
接口的实例,用于指定筛选条件。该方法返回一个新的Stream对象,其中包含满足条件的元素。
3. 使用示例
下面我们通过实际代码示例来演示list.stream().filter
方法的应用。
假设我们有一个保存学生信息的集合List
public class Student {
private String name;
private int age;
// 其他属性和方法省略
}
现在我们要从这个集合中筛选出年龄大于等于18岁的学生。
首先,我们可以使用传统的方式遍历集合并筛选出满足条件的元素:
List<Student> students = new ArrayList<>();
// 添加一些学生信息...
List<Student> filteredStudents = new ArrayList<>();
for (Student student : students) {
if (student.getAge() >= 18) {
filteredStudents.add(student);
}
}
使用Stream流,我们可以用更加简洁的方式来实现同样的功能:
List<Student> filteredStudents = students.stream()
.filter(student -> student.getAge() >= 18)
.collect(Collectors.toList());
以上代码中,我们首先通过调用stream
方法将List转化为Stream对象。然后,通过链式调用filter
方法,传入一个Lambda表达式作为筛选条件,筛选出年龄大于等于18岁的学生。最后,通过collect
方法将筛选结果保存为一个新的List对象。
需要注意的是,filter
方法的参数是一个返回值为boolean类型的函数式接口,用于对元素进行判断。在以上示例中,我们使用Lambda表达式student -> student.getAge() >= 18
作为筛选条件。
4. filter
方法的应用场景
filter
方法在实际开发中有很多应用场景。下面列举几个常见的例子。
4.1 筛选出满足某个条件的元素
我们可以使用filter
方法来筛选出满足某个条件的元素,比如筛选出年龄大于等于18岁的学生、筛选出工资高于平均工资的员工等。
示例代码:
List<Student> filteredStudents = students.stream()
.filter(student -> student.getAge() >= 18)
.collect(Collectors.toList());
4.2 过滤出不重复的元素
在某些场景下,我们可能需要对集合中的元素进行去重操作。filter
方法可以很方便地帮助我们实现这个功能。
示例代码:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 4, 5, 6, 6, 7, 8, 9, 9, 10);
List<Integer> distinctNumbers = numbers.stream()
.distinct()
.collect(Collectors.toList());
以上代码中,我们通过distinct
方法筛选出不重复的元素。最终,distinctNumbers
列表中将只包含不重复的数字。
4.3 排除满足某个条件的元素
除了筛选出满足某个条件的元素外,有时我们也需要排除满足某个条件的元素。这时可以使用filter
方法配合逻辑非(!
)来实现。
示例代码:
List<Student> filteredStudents = students.stream()
.filter(student -> !(student.getAge() < 18))
.collect(Collectors.toList());
以上代码中,我们使用!(student.getAge() < 18)
作为筛选条件,排除年龄小于18岁的学生。
5. 总结
本文介绍了Java 8中list.stream().filter
方法的使用方式和示例代码。通过使用这个方法,我们可以以一种简洁、灵活的方式对集合中的元素进行筛选和过滤操作。