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 指南](