【问题标题】:How to sort the hashmap in descending order by values and if the values are the same then by key in ascending order如何按值按降序对哈希图进行排序,如果值相同,则按升序键
【发布时间】:2021-11-10 11:21:37
【问题描述】:

我有一个名为“相关性”的HashMap<Integer, Integer>,例如 {2: 3, 1: 3, 3: 3, 5: 4, 4: 4, 6: 3},我想按值进行 DESC 排序。

Map<Integer, Integer> sortedRelevance = new LinkedHashMap<>();
relevance.entrySet()
        .stream()
        .sorted(Map.Entry.<Integer, Integer>comparingByValue(Comparator.reverseOrder()))
        .forEachOrdered(x -> sortedRelevance.put(x.getKey(), x.getValue()));

我得到一个哈希图 {5: 4, 4: 4, 2: 3, 1: 3, 3: 3, 6: 3}。如何对具有相同值的升序键进行排序?

【问题讨论】:

  • 按值的降序对映射进行排序后,是否要按键的升序对映射进行排序?请澄清您的问题。

标签: java sorting hashmap


【解决方案1】:

您可以通过添加对thenComparing 的调用来“链接”比较器:

Map<Integer, Integer> sortedRelevance = new LinkedHashMap<>();
relevance.entrySet()
         .stream()
         .sorted(Map.Entry.<Integer, Integer> comparingByValue(Comparator.reverseOrder())
                          .thenComparing(Map.Entry.comparingByKey()))
         .forEachOrdered(x -> sortedRelevance.put(x.getKey(), x.getValue()));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-12
    • 2012-10-24
    • 2014-06-29
    • 2011-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多