在Java中按值排序映射

时间:2012-01-16 15:30:33

标签: java sorting key

  

可能重复:
  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,那对我来说已经足够了。

感谢。

1 个答案:

答案 0 :(得分:1)

我建议在比较器中使用TreeMap。你是对的,使用TreeMap很难对值进行排序。您可以按照Sort a Map<Key, Value> by values (Java)建议如何按值排序。