Java流:收集嵌套集合

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java流:收集嵌套集合相关的知识,希望对你有一定的参考价值。

我正在学习如何使用Java流,并需要一些帮助来理解如何流式传输嵌套集合并将结果收集回集合中。

在下面的简单示例中,我创建了2个ArrayLists并将它们添加到ArrayList中。我希望能够在每个嵌套集合上执行一个简单的函数,然后将结果捕获到一个新集合中。最后一行代码甚至没有编译。任何解释将不胜感激!

    ArrayList<Integer> list1 = new ArrayList<Integer>(Arrays.asList(1,2,3));
    ArrayList<Integer> list2 = new ArrayList<Integer>(Arrays.asList(4,5,6));

    ArrayList<ArrayList<Integer>> nested = new ArrayList<ArrayList<Integer>>();
    nested.add(list1);
    nested.add(list2);

    ArrayList<ArrayList<Integer>> result = nested.stream()
            .map(list -> list.add(100))
            .collect(Collectors.toList());
答案

问题是List#add没有返回List。相反,您需要在映射后返回列表:

List<ArrayList<Integer>> result = nested.stream()
        .map(list -> {
            list.add(100);
            return list;
        })
        .collect(Collectors.toList());

或者你可以跳过使用map并使用forEach,因为ArrayList是可变的:

nested.forEach(list -> list.add(100));
另一答案

您可以使用Stream.of()执行此操作,而无需事先创建嵌套的限制。

        List<ArrayList<Integer>> nestedList = Stream.of(list1, list2)
            .map(list -> {list.add(100); return list;})
            .collect(Collectors.toList());

并且可能将地图操作提取到单独的函数中。

以上是关于Java流:收集嵌套集合的主要内容,如果未能解决你的问题,请参考以下文章

条件片段和导航重用

201621123062《java程序设计》第九周作业总结

java内存流:java.io.ByteArrayInputStreamjava.io.ByteArrayOutputStreamjava.io.CharArrayReaderjava.io(代码片段

java缓冲字符字节输入输出流:java.io.BufferedReaderjava.io.BufferedWriterjava.io.BufferedInputStreamjava.io.(代码片段

Java8 Stream流使用及其基本原理

Java高阶进阶之Java函数式编程-Stream流-Lambda表达式