Java List 过滤多个条件的方法

在Java编程中,列表(List)常用于存储一组数据。随着数据量的增加,我们常常需要在这些数据中进行筛选,以满足特定条件。本文将介绍如何使用Java进行列表过滤,并将涉及多个条件的过滤方法。

1. 什么是列表过滤?

列表过滤是一个从集合中提取符合特定条件的元素的过程。这在数据处理和分析中非常常见。在Java中,我们通常使用 Stream API 来实现这一目标。

2. Java List 过滤的基本示例

首先,我们需要一个 List 数据结构。下面的示例创建一个简单的学生类,并初始化一个学生列表,然后通过多个条件过滤出符合条件的学生。

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

class Student {
    String name;
    int age;
    double score;

    public Student(String name, int age, double score) {
        this.name = name;
        this.age = age;
        this.score = score;
    }

    @Override
    public String toString() {
        return name + " - Age: " + age + " - Score: " + score;
    }
}

public class FilterExample {
    public static void main(String[] args) {
        List<Student> students = new ArrayList<>();
        students.add(new Student("Alice", 20, 85.5));
        students.add(new Student("Bob", 22, 90.0));
        students.add(new Student("Charlie", 23, 70.0));
        students.add(new Student("Diana", 21, 95.5));

        List<Student> filteredStudents = students.stream()
            .filter(s -> s.age > 20)
            .filter(s -> s.score > 80.0)
            .collect(Collectors.toList());

        filteredStudents.forEach(System.out::println);
    }
}

在这个示例中,我们创建了一个学生列表,并通过 Stream API 使用多个条件过滤出年龄大于20岁且分数高于80的学生。

3. 状态图示例

以下是对应状态图,展示了过滤阶段的不同状态变化。

stateDiagram
    [*] --> InitialState
    InitialState --> FilterAge : 年龄过滤
    FilterAge --> FilterScore : 分数过滤
    FilterScore --> FinalState : 过滤完成
    FinalState --> [*]

在这个状态图中,我们展示了从初始状态到最终状态的转换,以及各个过滤步骤。

4. 序列图示例

接下来,我们展示一个序列图,它描绘了调用过滤方法的过程。

sequenceDiagram
    participant Main
    participant Stream
    participant Collectors

    Main->>Stream: 初始化学生列表
    Stream->>Stream: 进行年龄过滤
    Stream->>Stream: 进行分数过滤
    Stream->>Collectors: 收集结果
    Collectors->>Main: 返回过滤后的学生列表

在这个序列图中,我们展示了在主方法中如何初始化学生列表,并通过Stream API进行过滤及收集结果的过程。

5. 总结

通过本文的示例,我们清楚地了解了如何在Java中对List进行多条件过滤。利用Stream API,可以高效地实现复杂数据处理。同时,章节中展示的状态图和序列图也提供了对该过程的可视化理解,方便程序员在实际开发中应用这些知识。希望这篇文章能为你的Java编程带来帮助!