Java Stream 是 Java 8 引入的一个新的 API,它提供了一种函数式的编程方式来处理集合数据。使用 Stream,我们可以对集合中的元素进行过滤、映射、排序等操作,以便以一种更简洁、更灵活的方式处理数据。
在实际开发中,我们经常会遇到需要过滤某个字段为空的情况。例如,我们有一个包含学生信息的集合,每个学生都有姓名和年龄两个属性,我们想要找出其中年龄为空的学生。下面我们就来看看如何使用 Stream 来实现这个需求。
首先,我们需要定义一个学生类,包含姓名和年龄两个属性。
public class Student {
private String name;
private Integer age;
public Student(String name, Integer age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public Integer getAge() {
return age;
}
}
接下来,我们创建一个包含学生信息的集合,并初始化一些学生对象。
List<Student> students = new ArrayList<>();
students.add(new Student("Tom", 20));
students.add(new Student("Alice", null));
students.add(new Student("Bob", 18));
students.add(new Student("Jerry", null));
students.add(new Student("Lucy", 22));
现在,我们使用 Stream 来过滤出年龄为空的学生。
List<Student> filteredStudents = students.stream()
.filter(student -> student.getAge() == null)
.collect(Collectors.toList());
上面的代码使用 stream()
方法将集合转换为一个 Stream 对象,然后使用 filter()
方法过滤出年龄为空的学生,最后使用 collect()
方法将过滤后的结果收集到一个新的集合中。
经过上面的操作,filteredStudents
中就包含了所有年龄为空的学生对象。
接下来,我们可以对过滤出的结果进行进一步的操作,例如将姓名打印出来。
filteredStudents.stream()
.map(Student::getName)
.forEach(System.out::println);
上面的代码使用 map()
方法将学生对象映射为姓名,并使用 forEach()
方法对每个姓名进行打印。
除了过滤,Stream 还提供了许多其他的操作方法,例如排序、统计、求和等等。我们可以根据具体需求来选择使用这些方法。
总结一下,使用 Stream 可以简化我们对集合数据的处理,使代码更加简洁、易读且具有可维护性。通过使用 filter()
方法,我们可以轻松地过滤出某个字段为空的元素,并对过滤结果进行进一步操作。希望本文对你理解 Stream 的过滤功能有所帮助。
stateDiagram
[*] --> 初始化集合
初始化集合 --> 创建学生对象
创建学生对象 --> 过滤年龄为空的学生
过滤年龄为空的学生 --> 打印学生姓名
打印学生姓名 --> [*]
参考链接:
- [Java 8 Stream 指南](