Java 流 : Collect a nested collection

标签 java lambda stream

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

在下面的简单示例中,我创建了 2 个 ArrayList 并将它们添加到一个 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));

关于Java 流 : Collect a nested collection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47113589/

相关文章:

c# - 从 Stream 读取大量 "count"字节然后将它们复制到新数组是否安全?

java - Hibernate 使用 @MappedSuperClass 祖先映射泛型类

java - 取消 JComboBox 操作事件

java - 如何获取位置坐标?

c# - Lambda 表达式和存储过程

php - 我可以使用不是磁盘上文件的证书来使用 SSL 套接字吗? (即在数据库中)

java - 从 java 设置 linux cron 作业

python max 函数使用 'key' 和 lambda 表达式

java - 如何在lambda表达式中调用方法

javascript - 如何在网页上流式传输(分段)mp4 视频