【发布时间】:2012-01-16 15:30:32
【问题描述】:
这是我的作品:
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。 -
如果您创建了一个自定义类来表示您的卡片,您的代码会更容易阅读。