Java 8流peek api
我用^{
List<String> list = Arrays.asList("Bender", "Fry", "Leela");
list.stream().peek(System.out::println);
但是,控制台上没有打印任何内容。如果我这样做:
list.stream().peek(System.out::println).forEach(System.out::println);
我看到以下输出peek和foreach调用的代码
Bender
Bender
Fry
Fry
Leela
Leela
无论是foreach
还是peek
都有一个(Consumer<? super T> action)
那么,为什么输出不同呢
# 1 楼答案
Java-8中的流是惰性的,此外,如果流中有两个链式操作,那么第二个操作将在第一个操作处理完一个数据元素单元后开始(假设流中有一个终端操作)
这就是为什么可以看到重复的名称字符串得到输出的原因
# 2 楼答案
该Javadoc提到以下内容:
peek
作为中间操作没有任何作用。在应用像foreach
这样的终端操作时,结果确实会打印出来,如图所示# 3 楼答案
peek
的文档说因此,您必须对
System.out.println
的结果流执行某些操作# 4 楼答案
从Stream上的文档中可以看到peek方法: