首页 > 解决方案 > 通过比较器与 java 流 api 对地图的值进行排序

问题描述

我有 aMap并且想通过Comparator将结果放入 a来对值进行排序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不适用于地图。

标签: javajava-stream

解决方案


为什么不使用Collectors.toMap()

.collect(Collectors.toMap(
        Entry::getKey,
        Entry::getValue,
        (a, b) -> { throw new AssertionError("impossible"); },
        LinkedHashMap::new));

推荐阅读