Stream方法使用
peek和foreach方法
peek 和 foreach ,都可以用于对元素进行遍历然后逐个的进行处理。
但根据前面的介绍(详细可看Stream初相识篇),peek属于中间方法,而foreach属于终止方法。这也就意味着peek只能作为管道中途的一个处理步骤,而没法直接执行得到结果,其后面必须还要有其它终止操作的时候才会被执行;而foreach作为无返回值的终止方法,则可以直接执行相关操作。
publicvoidtestPeekAndforeach() { List<String>sentences=Arrays.asList("hello world","Jia Gou Wu Dao"); // 演示点1: 仅peek操作,最终不会执行System.out.println("----before peek----"); sentences.stream().peek(sentence->System.out.println(sentence)); System.out.println("----after peek----"); // 演示点2: 仅foreach操作,最终会执行System.out.println("----before foreach----"); sentences.stream().forEach(sentence->System.out.println(sentence)); System.out.println("----after foreach----"); // 演示点3: peek操作后面增加终止操作,peek会执行System.out.println("----before peek and count----"); sentences.stream().peek(sentence->System.out.println(sentence)).count(); System.out.println("----after peek and count----"); }
输出结果可以看出, peek 独自调用时并没有被执行、但peek后面加上终止操作之后便可以被执行,而foreach 可以直接被执行:
----beforepeek--------afterpeek--------beforeforeach----helloworldJiaGouWuDao----afterforeach--------beforepeekandcount----helloworldJiaGouWuDao----afterpeekandcount----