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?

答案是否定的。您只能在完成分组后按分组的值排序

选项:

  1. 分组排序后需要调用stream()方法 然后将值收集到地图上。
  2. 使用带有整理功能的collectingAndThen进行排序 然后采集到地图。

return getTrigraphStream(path)
       .collect(collectingAndThen(groupingByConcurrent(Function.identity(), counting()),
                  map -> map.entrySet().stream().sorted(....).collect(...)));

顺便问一下,创建新流有什么问题?这是一个便宜的操作。