Collectors.groupingby 分组后多字段排序
时间: 2023-07-01 17:29:06 浏览: 249
可以使用`Comparator`的`thenComparing`方法来实现多字段排序。假设我们有一个`Person`类,其中有`name`和`age`两个字段,我们要按照`name`字段进行分组,然后按照`age`字段进行升序排序,可以使用以下代码:
```java
Map<String, List<Person>> result = persons.stream()
.collect(Collectors.groupingBy(Person::getName,
Collectors.collectingAndThen(Collectors.toList(),
list -> list.stream()
.sorted(Comparator.comparingInt(Person::getAge))
.collect(Collectors.toList()))));
```
在这个代码中,我们先按照`name`字段进行分组,然后使用`collectingAndThen`方法对每个分组中的`Person`列表进行转换。在转换过程中,我们先使用`sorted`方法按照`age`字段进行升序排序,然后再使用`collect`方法将排序后的列表收集起来。
注意,在这个代码中我们使用了`collectingAndThen`方法将最终结果转换为不可变的`List`,这是为了避免结果被修改。如果你不需要这个特性,可以直接使用`Collectors.toList()`方法来代替。
阅读全文