我想知道是否可以运行带有foreach分支的流, 然后继续使用其他操作运行流..
例如:
这不会编译:
(打印值以及之后保持映射/平面映射......)
List<Integer> list = new ArrayList<>();
list.stream()
.map(x->new ArrayList<int>( x ).forEach(y-> System.out.print(y)) )
.map(...)
答案 0 :(得分:3)
如果要打印流中的每个元素,然后执行其他处理,peek是一个选项:
list.stream()
.peek(System.out::println) // or any other method that consumes Integers
.map(...)
在这种情况下,peek
中的中间操作将在map
之前执行,因此在进一步处理之前将打印每个Integer
。如果要在进一步处理之前打印所有数字,则需要2个流。
这部分代码:
list.stream()
.map(x->new ArrayList<int>( x )
似乎不对。首先,您尝试使用原始ArrayList
而不是int
创建Integer
,这在Java中是不允许的。此外x
是Integer
,ArrayList
的构造函数采用整数使用它来设置容量(底层数组的大小)。在这种情况下,ArrayList
保持为空,因为没有添加任何内容,因为流也是空的,所以不会打印任何内容。