stream分组获取最大的
时间: 2024-09-14 19:07:23 浏览: 45
在Java中,`Stream` API提供了一种高效的方式来处理集合数据并进行操作。如果你想要从一组元素中按某个键进行分组,并获取每个组中的最大值,你可以使用`Collectors.groupingBy()`配合`max()`函数。这个过程通常涉及到以下步骤:
1. 首先,你需要创建一个`Function`或者 lambda 表达式,它将输入映射到分组的关键字。例如,如果你有一个Person对象列表,你想按年龄分组,那么函数可能是 `(Person p) -> p.getAge()`。
2. 使用`Collectors.groupingBy()`方法,传入上面的函数,它会返回一个`Map<Key, Stream<T>>`,其中`Key`是你指定的分组键,`T`是原集合中的元素类型。
3. 对于每个分组流,应用`max()`方法找到每个组内的最大值。`max()`方法接受一个Comparator作为参数,用于比较元素。
4. 最后,可以使用`forEachPair()`或者`.map()`结合`max().get()`来获取每个组的最大值并存储它们。
例如:
```java
List<Person> people = ...;
Map<Integer, Person> maxAgeGroups = people.stream()
.collect(Collectors.groupingBy(Person::getAge, Collectors.maxBy(Comparator.comparing(Person::getName))));
```
这将返回一个`Map`,其中每个键对应一个年龄,值是该年龄下的名字最长的人。
阅读全文