【问题标题】:sort map groupingBy counting排序地图分组按计数
【发布时间】:2019-04-23 07:24:30
【问题描述】:

有没有办法在这个收集器中按值对地图进行排序而不创建新的流? 现在它打印:AAS:5 ABA:195 ABC:12 ABE:52。 所需:ABA:195 ABE:52 ... getTrigraphStream(path) 返回:HOW THE TRA GRI ONC GRI ONC INS WHE INS WHE

 public Map<String, Long> getTrigraphStatisticsMapAlphabet(String path) {
    return getTrigraphStream(path)
       .collect(groupingByConcurrent(Function.identity(),
           ConcurrentSkipListMap::new, counting()));
    }

【问题讨论】:

    标签: sorting java-8 java-stream counting collectors


    【解决方案1】:

    有没有办法在这个收集器中按值对地图进行排序而不 创建一个新的流?

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

    选项:

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

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

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

    【讨论】:

    • 或者使用SortedMap也许?
    • 在这个操作中,不需要使用ConcurrentSkipListMap
    • @nullpointer 按键对地图进行排序,而不是我认为的值。
    猜你喜欢
    • 2011-10-08
    • 1970-01-01
    • 1970-01-01
    • 2015-12-31
    • 1970-01-01
    • 2019-03-27
    • 1970-01-01
    • 1970-01-01
    • 2012-11-02
    相关资源
    最近更新 更多