java - 如何使用 Streams 将二维列表转换为一维列表?

标签 java list java-8 java-stream

我试过这段代码( listArrayList<List<Integer>> ):

list.stream().flatMap(Stream::of).collect(Collectors.toList());

但它什么也没做;该列表仍然是一个二维列表。如何将此二维列表转换为一维列表?

最佳答案

您仍然收到列表的原因是因为当您申请 Stream::of它正在返回现有流的新流。

那是你执行 Stream::of 的时候这就像有 {{{1,2}}, {{3,4}}, {{5,6}}} 然后当你执行 flatMap就像这样做:

{{{1,2}}, {{3,4}}, {{5,6}}} -> flatMap -> {{1,2}, {3,4}, {5,6}}
// result after flatMap removes the stream of streams of streams to stream of streams

相反,您可以使用 .flatMap(Collection::stream) 获取流的流,例如:

{{1,2}, {3,4}, {5,6}}

并将其变成:

{1,2,3,4,5,6}

因此,您可以将当前的解决方案更改为:

List<Integer> result = list.stream().flatMap(Collection::stream)
                           .collect(Collectors.toList());

关于java - 如何使用 Streams 将二维列表转换为一维列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44251460/

相关文章:

java - 使用 Java Streams 从嵌套列表中 findAny

Java Selenium 使用 Apache POI - 读取 Excel 文件并将两行拉到一起

java - 在 Java 中检查文件或目录是否存在

java - 将变量访问到方法声明中

Java初学者q-遍历ArrayList,select+remove items问题

c# - 如何使用 LINQ 根据成员字典键对对象进行分组和投影?

java - 执行 Runtime.getRuntime().exec(),参数之间留有空格

python只将最后的输出写入文件

java - 如何安全地将java对象转换为泛型集合?

使用方法体的 Java 8 谓词仅被调用一次?