【发布时间】:2016-10-02 04:19:10
【问题描述】:
我正在使用来自this 问题的解决方案对LinkedHashMap 中的字符串值进行排序。然而,排序根本不起作用。这是我写的代码。
Map<Integer, String> sortedMap = myMap.entrySet().stream()
.sorted(Map.Entry.comparingByValue())
.collect(Collectors.toMap(Map.Entry<Integer, String>::getKey,
Map.Entry<Integer, String>::getValue));
myMap = new LinkedHashMap<Integer, String>(sortedMap);
奇怪的是,当同时使用comparingByValue 和comparingByKey 方法时,它正在对Integerkeys 进行排序。所以它肯定是排序,只是不是String 值,而是Integer 键。我不明白我在这里做错了什么。
【问题讨论】:
-
我的猜测是
Collectors.toMap正在将它们收集到哈希映射中,从而破坏了排序。 -
这是有道理的。但是,这仍然不能解释整数键的排序。
-
整数似乎已排序,因为整数值本身用作哈希,但是一旦添加更多整数,您可能会得到不同的顺序,因为重新哈希/多个项目最终在同一个存储桶中。
标签: java sorting hashmap java-8 java-stream