我有这个HashMap,
private static Map<String, Integer> messageCount = new HashMap<>();
我试图按值排序。 我找到了以下代码:
Map<String, Integer> sorted = Server.getMessageCount().entrySet().stream().sorted(Map.Entry.comparingByValue()).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,
(e1, e2) -> e1, HashMap::new));
理论上应该按Integer值对它进行排序,但是Map仍按字母顺序(按键)进行排序。
(我用它来输出我的地图,但是我很确定这不是问题所在(或者是吗?)
System.out.println(Arrays.toString(sorted.entrySet().toArray()));
答案 0 :(得分:3)
正如docs所说的,HashMap
不会保留物品的奇数。
...此类不保证地图的顺序;特别是,它不能保证顺序会随着时间的推移保持恒定。
您应该改用LinkedHashMap
。这样可以保留插入顺序(docs):
...此链接列表定义了迭代顺序,通常是将键插入映射的顺序(插入顺序)。
Map<String, Integer> sorted = Server.getMessageCount()
.entrySet().stream()
.sorted(Map.Entry.comparingByValue())
.collect(Collectors.toMap(
Map.Entry::getKey, Map.Entry::getValue,
(e1, e2) -> e1, LinkedHashMap::new
));