猿问

通过使用 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不适用于地图。


当年话下
浏览 111回答 2
2回答

郎朗坤

为什么不使用Collectors.toMap()?.collect(Collectors.toMap( &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Entry::getKey, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Entry::getValue, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(a,&nbsp;b)&nbsp;->&nbsp;{&nbsp;throw&nbsp;new&nbsp;AssertionError("impossible");&nbsp;}, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LinkedHashMap::new));

慕少森

您不能对不支持数组样式索引的集合执行就地排序,因此对于映射来说这是不可能的(除非您在 a 上使用类似选择排序的东西,但那将是一个坏主意)LinkedHashMap。创建新地图是不可避免的。不过,您仍然可以按照 shmosel 的回答来简化它。
随时随地看视频慕课网APP

相关分类

Java
我要回答