在java中可以运行带有foreach分支的流,然后继续使用其他操作运行流

时间:2017-07-10 14:11:22

标签: java java-8

我想知道是否可以运行带有foreach分支的流, 然后继续使用其他操作运行流..

例如:

这不会编译:

(打印值以及之后保持映射/平面映射......)

    List<Integer> list = new ArrayList<>();
    list.stream()
            .map(x->new ArrayList<int>( x ).forEach(y-> System.out.print(y)) )
            .map(...)

1 个答案:

答案 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中是不允许的。此外xIntegerArrayList的构造函数采用整数使用它来设置容量(底层数组的大小)。在这种情况下,ArrayList保持为空,因为没有添加任何内容,因为流也是空的,所以不会打印任何内容。