【问题标题】:Sorting map by value in Java [duplicate]在Java中按值排序地图[重复]
【发布时间】:2012-01-16 15:30:32
【问题描述】:

可能重复:
How to sort a Map<Key, Value> on the values in Java?

这是我的作品:

ArrayList<Map.Entry<Integer, Integer>> suits = new ArrayList<Map.Entry<Integer, Integer>>();
suits.add(new AbstractMap.SimpleEntry(0, 3));
suits.add(new AbstractMap.SimpleEntry(1, 5));
suits.add(new AbstractMap.SimpleEntry(2, 1));
suits.add(new AbstractMap.SimpleEntry(3, 3));
Collections.sort(suits, new Comparator<Map.Entry<Integer, Integer>>() {
  @Override
  public int compare(Entry<Integer, Integer> e1, Entry<Integer, Integer> e2) {
    if (e1.getValue() > e2.getValue())
      return 1;
    else if (e1.getValue() < e2.getValue())
      return -1;
    else if (e1.getKey() > e2.getKey())
      return 1;
    else if (e1.getKey() < e2.getKey())
      return -1;
    else
      return 0;
  }
});

它有效(至少在我包含的简单测试用例中)。它的目的是按牌的数量(例如 3 黑桃、5 红心、5 方块、6 梅花)对一手牌进行排序,然后继续处理我们拥有较少牌的花色(3 黑桃)。

我已经看到这个按值对 Map 进行排序的问题很常见,我在理解其他地方提供的一些答案时遇到了一些困难,因为我完全没有接受过正式的编码培训,也没有接受过 Java 培训——所以我做了我自己的自己的。 这段代码有什么明显的错误吗?如果它不值得每天 WTF,那对我来说已经足够了。

谢谢。

【问题讨论】:

  • 代码中没有明显错误。但它与Map 没有太大关系;你只有一个 List 的键值对(作为 Map.Entry 对象),而不是 Map
  • 如果您创建了一个自定义类来表示您的卡片,您的代码会更容易阅读。

标签: java sorting key


【解决方案1】:

我建议将 TreeMap 与您的比较器一起使用。你是对的,使用 TreeMap 很难按值排序。您可以关注Sort a Map<Key, Value> by values (Java),它会建议如何按值排序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-04
    • 2019-07-21
    • 2012-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多