根据this question,peek()
是懒惰的,这意味着我们应该以某种方式激活它。事实上,要激活它以打印到控制台的东西,我试过这个:
Stream<String> ss = Stream.of("Hi","Hello","Halo","Hacker News");
ss.parallel().peek(System.out::println);
System.out.println("lol"); // I wrote this line to print sth out to terminal to wake peek method up
但这不起作用,输出是:
lol
因此,如何让peek
函数真正起作用?
如果没有办法,那么使用peek
是什么意思?
答案 0 :(得分:3)
你必须在流上使用terminal operation才能执行它(peek不是终端,它是一个中间操作,它返回一个新的Stream),例如计数():
Stream<String> ss = Stream.of("Hi","Hello","Halo","Hacker News");
ss.parallel().peek(System.out::println).count();
或将peek
替换为forEach
(终端):
ss.parallel().forEach(System.out::println);
答案 1 :(得分:1)
peek()方法使用Consumer作为参数,这意味着可能会改变传入元素的状态。 同时Java文档说窥视主要用于调试目的。它是一个中间运算符,需要像forEach这样的终端运算符。
stream().peek(Consumer).forEach(Consumer);