使用java streams api通过比较器对映射值进行排序
我有一个Map
,希望通过Comparator
将结果放入LinkedHashMap
来对值进行排序
Map<String, User> sorted = test.getUsers()
.entrySet()
.stream()
.sorted(Map.Entry.comparingByValue(SORT_BY_NAME))
.collect(LinkedHashMap::new, (map, entry) -> map.put(entry.getKey(), entry.getValue()),
LinkedHashMap::putAll);
test.setUsers(sorted);
所有的工作都可以,但是,我想知道这是否可以简化
实际上,我创建了一个新的Map
,并将这个新的Map
放入setUsers()
。我可以直接更改流而不创建新的LinkedHashMap
使用Collections.sort(Comparator)
可以直接对列表进行排序。但是,Collections.sort
不适用于地图
# 1 楼答案
为什么不使用
Collectors.toMap()
# 2 楼答案
您无法对不支持数组样式索引的集合执行就地排序,因此对于映射来说,这是不可能的(除非您在
LinkedHashMap
上使用类似于选择排序的方法,但这是个坏主意)。创建新地图是不可避免的。不过,你仍然可以通过遵循shmosel的答案来简化它