Java Stream 根据条件筛选

Java 8 引入了一个强大的流(Stream)API,使得对集合数据的处理更加便捷和高效。流的基本操作包括中间操作(如过滤、映射)以及终止操作(如计数、收集)。在这篇文章中,我们将重点讲解如何利用 Java Stream 根据条件筛选数据。

什么是 Stream

Stream 是对集合的一个抽象,它使得对数据的处理可以像处理数组一样方便。与传统循环遍历不同,Stream 提供了更加简洁和声明式的方式。

筛选示例

例如,我们有一个用户类 User,它包含 idnameage 三个属性。我们希望从用户列表中筛选出年龄大于 18 的用户。下面是一个简单的代码示例。

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

class User {
    private int id;
    private String name;
    private int age;

    public User(int id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public int getAge() {
        return age;
    }

    public String getName() {
        return name;
    }
}

public class StreamFilterExample {
    public static void main(String[] args) {
        List<User> users = Arrays.asList(
            new User(1, "Alice", 22),
            new User(2, "Bob", 17),
            new User(3, "Charlie", 19)
        );

        // 根据年龄筛选用户
        List<User> adultUsers = users.stream()
            .filter(user -> user.getAge() > 18)
            .collect(Collectors.toList());

        // 输出结果
        adultUsers.forEach(user -> System.out.println(user.getName()));
    }
}

在上述代码中,我们首先创建了一个用户列表,然后通过 stream() 方法创建一个流。接着,使用 filter 方法根据条件筛选用户,最后通过 collect 方法将结果收集到一个新的列表中并输出。

状态图

通过状态图,我们可以更清晰地理解流的处理过程。在这个简单的用户筛选流程中,我们可以将状态表示如下:

stateDiagram
    [*] --> Start
    Start --> Create_Stream
    Create_Stream --> Filter
    Filter --> Collect
    Collect --> End
    End --> [*]

高级筛选

除了简单的条件筛选外,我们还可以使用复合条件。例如,我们想筛选出年龄在 18 到 25 岁之间的用户。这可以通过组合多个条件实现。

List<User> youngAdults = users.stream()
    .filter(user -> user.getAge() >= 18 && user.getAge() <= 25)
    .collect(Collectors.toList());

数据可视化

对于实际应用场景,我们可以通过饼状图展示各种用户年龄段的比例。这种可视化将帮助我们更好地理解数据分布。

pie
    title 用户年龄分布
    "18-25岁": 50
    "26-35岁": 30
    "36-45岁": 15
    "46岁及以上": 5

总结

Java Stream 提供了强大而灵活的数据处理能力,通过条件筛选我们可以轻松访问满足特定条件的数据。借助于流操作,我们能够写出更简洁的代码,提升开发效率。无论是简单的条件,还是真实应用中的复杂条件组合,Stream API 使得数据处理变得轻松自如。

在实践中,多尝试使用 Stream API 来处理数据集合,你会发现它为 Java 代码带来了全新的体验与便利。希望本篇文章能帮助你更好地理解和使用 Java Stream 进行条件筛选。