【问题标题】:Trying to sort a linked HashMap <Character, Integer> by value尝试按值对链接的 HashMap <Character, Integer> 进行排序
【发布时间】:2017-11-26 14:06:22
【问题描述】:
letterFrequencies.entrySet().stream()
        .sorted(Map.Entry.comparingByValue().reversed())
        .collect(Collectors.toMap(Entry::getKey, Entry::getValue));

我目前正在使用它来尝试,但我收到一条错误消息,上面写着The method sorted(Comparator&lt;? super Map.Entry&lt;Character,Integer&gt;&gt;) in the type Stream&lt;Map.Entry&lt;Character,Integer&gt;&gt; is not applicable for the arguments (Comparator&lt;Map.Entry&lt;Object,Comparable&lt;? super Comparable&lt;? super V&gt;&gt;&gt;&gt;)

【问题讨论】:

  • Collectors.toMap - 哎呀。即使你让你的Comparator 工作,将结果转储到HashMap 也不会产生任何有用的东西。

标签: java sorting linkedhashmap


【解决方案1】:

尝试类似:

LinkedHashMap<Character, Integer> resultSet = 
                   letterFrequencies.entrySet().stream()
                  .sorted(Map.Entry.<Character, Integer>comparingByValue().reversed())
                  .collect(Collectors.toMap(Entry::getKey, Entry::getValue, (e1, e2) -> e1, LinkedHashMap::new));

此外,正如 Boris the Spider 所提到的,将结果转储到 HashMap 不会保持插入顺序,因此在此处使用 LinkedHashMap

【讨论】:

    【解决方案2】:

    您可以像这样传递Comparator.reverseOrder() 并收集到LinkedHashMap

    letterFrequencies.entrySet().stream()
                .sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
                .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,
                        (v1, v2) -> v1, LinkedHashMap::new));
    

    【讨论】:

    • 您可能希望将comparingByKey 更改为comparingByValue
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-28
    • 1970-01-01
    • 2021-02-01
    • 1970-01-01
    相关资源
    最近更新 更多