stream流 filter取分组后的第一条数据
时间: 2023-07-08 14:16:47 浏览: 96
要实现这个需求,可以先使用`Collectors.groupingBy()`方法将流按照某个属性分组,然后使用`Map.forEach()`方法遍历每一个分组,使用`Stream.filter()`方法过滤出满足条件的第一个元素,然后使用`findFirst()`方法获取第一个元素。具体实现可以参考下面的代码示例:
```java
List<Person> persons = Arrays.asList(
new Person("Tom", 20),
new Person("Jane", 25),
new Person("Tom", 30),
new Person("John", 35)
);
Map<String, List<Person>> map = persons.stream()
.collect(Collectors.groupingBy(Person::getName));
Map<String, Person> result = new HashMap<>();
map.forEach((name, list) -> {
result.put(name, list.stream()
.filter(person -> person.getAge() > 25)
.findFirst()
.orElse(null));
});
```
在上述代码中,首先使用`Collectors.groupingBy()`方法按照Person对象的name属性将流分组,得到一个Map<String, List<Person>>对象。然后使用`forEach()`方法遍历Map中的每一个list,使用`Stream.filter()`方法过滤出满足条件的第一个元素,使用`findFirst()`方法获取第一个元素,最后将结果存储在一个新的Map<String, Person>对象中。
阅读全文