如何将Map中的List值转换为单个List?

8

如何最好(高效简单)地将 Map<Object1, List<Object2>> 的值转换为 List<Object2>?我应该只需遍历所有条目并将其 addAll 到列表中吗?

3个回答

20

这是第三种方法,所以您不需要创建一个ArrayList,这就是您实际要求的。 这是使用流的正确方式,因为您没有更改任何对象的状态。

List<Object2> values = myMap.values()
                            .stream()
                            .flatMap(Collection::stream)
                            .collect(Collectors.toList());

需要 Java 8。 - Globox
这将返回一个List<List<String>>,因为myMap.values是一个Collection<List<String>>。 - dinhokz
哦,好的,谢谢。我没有看到那个修订后的 List<Object2>。 - Nick Ziebert

0

刚刚找到了它:

 List<Object2> list = myMap.values()
                           .stream()
                           .flatMap(item -> item.stream())
                           .collect(Collectors.toList()));

1
我误读了您的要求,然后删除了我的答案。我以为您真的想要一个列表的列表。我认为您提供的方法可能是最有效的之一,除非有一些巧妙的技巧。 - Paul Brinkley
1
流不应该用于改变另一个对象的状态。 - Nick Ziebert
刚刚修正了答案。 - dinhokz
我们的答案现在基本上是相同的。 - Nick Ziebert
现在它们是完全相同的。 - Nick Ziebert

0

使用addAll的一种选择。

List<Object2> list = new ArrayList<>();
myMap.values().forEach(list::addAll);

列表不会改变。 - dinhokz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接