Java 使用 Stream 流筛选对象集合:根据字段值获取特定数据
可以使用 Java 的 stream 流来筛选出对象集合中某字段类型为某值的数据。首先,我们需要定义一个 Predicate 来表示筛选条件,然后使用 stream 的 filter 方法将符合条件的数据筛选出来。
假设我们有一个对象集合 List
- 定义一个 Predicate,用来判断年龄是否为 18 岁:
Predicate<Person> agePredicate = person -> person.getAge() == 18;
- 使用 stream 的 filter 方法筛选出符合条件的数据:
List<Person> filteredList = personList.stream()
.filter(agePredicate)
.collect(Collectors.toList());
- 遍历筛选出的数据,取出姓名:
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 岁的人的姓名。
原文地址: https://www.cveoy.top/t/topic/o56p 著作权归作者所有。请勿转载和采集!