【发布时间】:2016-01-31 20:32:36
【问题描述】:
我有一个HashMap,看起来像:
HashMap<Player, Integer> playerHashMap = new HashMap<>();
玩家是包含姓名、号码、年龄等的对象。
现在我已经对其进行了排序,它看起来像这样:
key , value
-----------------
Player1, 1
Player2, 2
Player3, 4
Player4, 6
但我想实现按值反转这个映射,像这样:
key , value
-----------------
Player4, 6
Player3, 4
Player2, 2
Player1, 1
有什么想法吗?
排序方法(按值排序)如下所示:
private static HashMap<Player, Integer> sortByValues(HashMap<Player, Integer> map) {
List list = new LinkedList(map.entrySet());
Collections.sort(list, new Comparator<Object>() {
public int compare(Object o1, Object o2) {
return ((Comparable) ((Map.Entry) (o1)).getValue())
.compareTo(((Map.Entry) (o2)).getValue());
}
});
HashMap<Player, Integer> sortedHashMap = new LinkedHashMap<Player, Integer>();
for (Iterator<?> it = list.iterator(); it.hasNext();) {
Map.Entry<Player, Integer> entry = (Map.Entry<Player, Integer>) it.next();
sortedHashMap.put(entry.getKey(), entry.getValue());
}
return sortedHashMap;
}
【问题讨论】:
-
“现在我已经对其进行了排序”这听起来并不真实,因为 HashMap 不保证任何顺序。如果您的意思是您能够按照描述的顺序打印它们而不是阻止您以不同的顺序打印它们?
-
你是如何“排序”你的 HashMap 的?代码在哪里?
-
我编辑了我的帖子并添加了外观方法来排序 HashMap。
-
嗯,很难想象有更低效的方式来实现这种排序......
-
我猜你真正想做的是将
HashMap<Player, Integer>转换为HashMap<Integer, Player>。您无需进行任何排序即可实现这一目标。
标签: java hashmap reverse sorted