Collectors.groupingBy分组后的排序问题
时间: 2023-07-11 12:45:22 浏览: 177
Java8 stream 中利用 groupingBy 进行多字段分组求和案例
5星 · 资源好评率100%
在使用`Collectors.groupingBy`进行分组后,如果需要对分组结果进行排序,可以使用`Collectors.toMap`方法并指定排序方式。具体的做法是将分组结果的`Map`转换为`LinkedHashMap`,并使用`Comparator`进行排序。以下是一个示例代码:
```java
Map<String, Long> wordCountMap = Arrays.stream("apple banana apple cherry banana apple".split(" "))
.collect(Collectors.groupingBy(
Function.identity(),
Collectors.counting()
));
LinkedHashMap<String, Long> sortedMap = wordCountMap.entrySet()
.stream()
.sorted(Map.Entry.comparingByKey())
.collect(Collectors.toMap(
Map.Entry::getKey,
Map.Entry::getValue,
(oldVal, newVal) -> oldVal,
LinkedHashMap::new
));
System.out.println(sortedMap);
```
在上面的示例代码中,首先使用`Collectors.groupingBy`将单词分组并统计出现次数,得到一个`Map<String, Long>`类型的结果。然后将该`Map`转换为`LinkedHashMap`,并使用`Map.Entry.comparingByKey()`进行排序。排序后的`Map`使用了`Collectors.toMap`方法进行转换,其中第一个参数指定了键的转换方式,第二个参数指定了值的转换方式,第三个参数指定了当出现键重复时的合并方式,最后一个参数指定了生成的`Map`的类型,这里使用了`LinkedHashMap`来保持顺序。
阅读全文