我最近发现了一种对包含 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/