我正在学习如何使用 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/