2012-01-16 29 views
1

可能重复:
How to sort a Map<Key, Value> on the values in Java?在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,那对我来说已经足够了。

谢谢。

+0

在代码中没有什么是公然错误的。但是'Map'不需要做很多事情;你只需要一个键值对的List(作为'Map.Entry'对象),而不是'Map'。 – Jesper

+0

如果您创建自定义类来表示您的卡,您的代码将更容易阅读。 – Mitch

回答

1

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