Java Stream: 使用filter方法过滤对象

在Java编程中,Stream API提供了一种便捷的方法来处理集合对象。通过使用Stream API,我们可以轻松对集合进行各种操作,如过滤、映射、排序等。其中,filter方法可以帮助我们过滤集合中的对象,只保留符合条件的对象。

Stream API简介

Stream是Java 8引入的一个新的抽象概念,它代表了一系列元素,并支持在这些元素上进行各种操作。Stream API提供了丰富的方法来操作集合,如mapfilterreduce等,使得我们可以更加高效地处理集合数据。

使用filter方法过滤对象

在Stream API中,filter方法用于过滤集合中的元素,只保留满足指定条件的元素。下面我们通过一个示例来演示如何使用filter方法过滤对象。

假设我们有一个Person类,表示一个人的信息,包括姓名和年龄:

public class Person {
    private String name;
    private int age;

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

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

现在,我们有一个包含多个Person对象的集合,我们想要过滤出年龄大于18岁的人。我们可以使用filter方法实现这个功能:

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

public class Main {
    public static void main(String[] args) {
        List<Person> people = Arrays.asList(
                new Person("Alice", 25),
                new Person("Bob", 17),
                new Person("Charlie", 30)
        );

        List<Person> adults = people.stream()
                .filter(person -> person.getAge() > 18)
                .collect(Collectors.toList());

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

在上面的示例中,我们首先创建了一个包含多个Person对象的集合people,然后使用stream方法将集合转换为Stream对象。接着我们调用filter方法,传入一个Predicate对象,用于判断年龄是否大于18岁。最后我们使用collect方法将过滤后的结果收集到一个新的集合中,并通过forEach方法打印每个符合条件的Person对象。

类图

下面是Person类的类图:

classDiagram
    class Person {
        - String name
        - int age
        + Person(String name, int age)
        + String getName()
        + int getAge()
        + String toString()
    }

在类图中,我们可以看到Person类有nameage两个字段,以及相应的构造方法和getter方法。

总结

通过使用filter方法,我们可以方便地过滤集合中的对象,只留下符合条件的对象。Stream API的强大之处在于提供了丰富的操作方法,使得我们可以更加便捷地对集合进行各种处理。在实际开发中,可以充分利用Stream API来提高代码的简洁性和可读性。希望本文对你理解Java Stream中的filter方法有所帮助!