在地图中将所有列表值合并在一起

时间:2016-03-31 10:23:56

标签: java java-8 java-stream

我想将地图转换为:

Map<String, List<String>> 

List<String> 

其中结果列表是所有List值的合并。

2 个答案:

答案 0 :(得分:4)

你可以拥有

List<String> result = map.values().stream().flatMap(List::stream).collect(Collectors.toList());

这将使用values()检索地图的值,然后将每个列表平面映射到由其元素组成的流中,并将结果收集到列表中。

另一个替代方案,即没有对每个列表进行平面映射,因此可能更高效,是通过在每个累积结果上调用Stream<List<String>>来直接收集values().stream()(由addAll返回)。

List<String> result = map.values().stream().collect(ArrayList::new, List::addAll, List::addAll);

答案 1 :(得分:1)

在地图条目的flatMap上使用Stream

List<String> list = map.entrySet()
                       .stream()
                       .flatMap(e->e.getValue().stream())
                       .collect(Collectors.toList());