sort map groupingBy 计数
sort map groupingBy counting
有没有办法在不创建新流的情况下在此收集器中按值对映射进行排序?
现在打印:AAS : 5 ABA : 195 ABC : 12 ABE : 52。
期望:ABA:195 ABE:52 ...
getTrigraphStream(path) returns:TRA GRI ONC GRI ONC 是如何进入的
public Map<String, Long> getTrigraphStatisticsMapAlphabet(String path) {
return getTrigraphStream(path)
.collect(groupingByConcurrent(Function.identity(),
ConcurrentSkipListMap::new, counting()));
}
Is there way to sort map by value inside this collector without
creation a new stream?
答案是否定的。您只能在完成分组后按分组的值排序。
选项:
- 分组排序后需要调用
stream()
方法
然后将值收集到地图上。
- 使用带有整理功能的
collectingAndThen
进行排序
然后采集到地图。
即
return getTrigraphStream(path)
.collect(collectingAndThen(groupingByConcurrent(Function.identity(), counting()),
map -> map.entrySet().stream().sorted(....).collect(...)));
顺便问一下,创建新流有什么问题?这是一个便宜的操作。
有没有办法在不创建新流的情况下在此收集器中按值对映射进行排序? 现在打印:AAS : 5 ABA : 195 ABC : 12 ABE : 52。 期望:ABA:195 ABE:52 ... getTrigraphStream(path) returns:TRA GRI ONC GRI ONC 是如何进入的
public Map<String, Long> getTrigraphStatisticsMapAlphabet(String path) {
return getTrigraphStream(path)
.collect(groupingByConcurrent(Function.identity(),
ConcurrentSkipListMap::new, counting()));
}
Is there way to sort map by value inside this collector without creation a new stream?
答案是否定的。您只能在完成分组后按分组的值排序。
选项:
- 分组排序后需要调用
stream()
方法 然后将值收集到地图上。 - 使用带有整理功能的
collectingAndThen
进行排序 然后采集到地图。
即
return getTrigraphStream(path)
.collect(collectingAndThen(groupingByConcurrent(Function.identity(), counting()),
map -> map.entrySet().stream().sorted(....).collect(...)));
顺便问一下,创建新流有什么问题?这是一个便宜的操作。