这是我的手工作品:
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 :(得分:1)
我建议在比较器中使用TreeMap。你是对的,使用TreeMap很难对值进行排序。您可以按照Sort a Map<Key, Value> by values (Java)建议如何按值排序。