可以使用 Java 的 stream 流来筛选出对象集合中某字段类型为某值的数据。首先,我们需要定义一个 Predicate 来表示筛选条件,然后使用 stream 的 filter 方法将符合条件的数据筛选出来。

假设我们有一个对象集合 List,其中 Person 类包含字段 name 和 age,现在需要取出年龄为 18 岁的人的姓名,可以按照以下步骤进行操作:

  1. 定义一个 Predicate,用来判断年龄是否为 18 岁:
Predicate<Person> agePredicate = person -> person.getAge() == 18;
  1. 使用 stream 的 filter 方法筛选出符合条件的数据:
List<Person> filteredList = personList.stream()
                                      .filter(agePredicate)
                                      .collect(Collectors.toList());
  1. 遍历筛选出的数据,取出姓名:
List<String> names = filteredList.stream()
                                .map(Person::getName)
                                .collect(Collectors.toList());

完整的示例代码如下:

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

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;
    }
}

public class Main {
    public static void main(String[] args) {
        List<Person> personList = Arrays.asList(
            new Person('Alice', 18),
            new Person('Bob', 20),
            new Person('Charlie', 18)
        );
        
        Predicate<Person> agePredicate = person -> person.getAge() == 18;
        
        List<Person> filteredList = personList.stream()
                                              .filter(agePredicate)
                                              .collect(Collectors.toList());
        
        List<String> names = filteredList.stream()
                                        .map(Person::getName)
                                        .collect(Collectors.toList());
        
        System.out.println(names);  // 输出:[Alice, Charlie]
    }
}

以上代码中,我们使用 stream 的 filter 方法筛选出年龄为 18 岁的 Person 对象,然后使用 map 方法将每个 Person 对象转换为姓名,最后使用 collect 方法将结果收集到一个新的 List 中。输出结果为 [Alice, Charlie],即年龄为 18 岁的人的姓名。

Java 使用 Stream 流筛选对象集合:根据字段值获取特定数据

原文地址: https://www.cveoy.top/t/topic/o56p 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录