Java Sort map by key 解释

标签 java sorting java-8 hashmap

我最近发现了一种对包含 GregorianCalendar 作为键的 map 进行排序的好方法。

Map<GregorianCalendar, String> map = new HashMap<>();

Map<GregorianCalendar, String> sortedMap = map.entrySet().stream().sorted(Map.Entry.comparingByKey()).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,
            (oldValue, newValue) -> oldValue, LinkedHashMap::new));

有人可以帮助我理解此命令中调用的每个过程,尤其是从流函数开始的过程吗?

谢谢

最佳答案

map.entrySet().stream()产生 Stream输入的条目 Map (即 Stream<Map.Entry<GregorianCalendar,String>>

.sorted(Map.Entry.comparingByKey())Stream 的元素进行排序通过条目的键(它依赖于键类型 - GregorianCalendar - 实现 Comparable 的事实)。

.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, LinkedHashMap::new))

产生 LinkedHashMap包含与输入相同的条目 Map .由于您使用的是 LinkedHashMap ,插入顺序保持不变,并且由于您对 Stream 的条目进行了排序通过按键,你会得到一个 Map其插入顺序(和迭代顺序)是根据键的顺序。

当然你可以得到一个排序的Map通过将输入的所有条目放入 Map 更容易在TreeMap :

Map<GregorianCalendar, String> sortedMap = new TreeMap<>(map);

即使您将新条目添加到 Map 中,也可以保持顺序的优点.

关于Java Sort map by key 解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47649845/

相关文章:

Java 8 流 : For Each

java - java中的Jframe加载窗口

java - 黑色像素不会完全变黑?

arrays - Swift - Tableview 在第二次加载后无法正确重新加载

arrays - 给定一个正整数和负整数数组,重新排列它,使一端有正整数,另一端有负整数

bash - 如何打印文件中的最高/最长值

java - 如何将 CSV 文件转换为 List<Map<String,String>>

java - 如果 HH :mm:ss is not defined?,我如何创建默认的 ZonedDateTime 到午夜

java - 为什么我们不能修改R.java?

java - Camel 代理提示类型错误