Java8 stream groupingBy() 降序 写法
时间: 2023-09-24 09:02:33 浏览: 106
Java8 stream 中利用 groupingBy 进行多字段分组求和案例
5星 · 资源好评率100%
可以使用`Collectors.groupingBy()`结合`Collectors.counting()`和`Comparator.reverseOrder()`来实现分组后按值降序排序,示例代码如下:
```java
Map<String, Long> result = list.stream()
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()))
.entrySet()
.stream()
.sorted(Map.Entry.<String, Long>comparingByValue(Comparator.reverseOrder()))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, LinkedHashMap::new));
```
解释一下:
1. `Collectors.groupingBy()`方法用来按照某个属性对流中的元素进行分组,其中`Function.identity()`表示按照元素本身进行分组。
2. `Collectors.counting()`方法用来统计每组元素的数量。
3. `Map.Entry.comparingByValue()`方法用来指定按照值进行排序,`Comparator.reverseOrder()`表示降序排列。
4. `Collectors.toMap()`方法用来将排序后的结果转化为一个`LinkedHashMap`,保留插入顺序。
最终的结果是一个`Map<String, Long>`类型的对象,其中`String`表示分组的属性,`Long`表示该属性在流中出现的次数。
阅读全文