如何使用Streams api peek()函数并使其工作?

时间:2016-07-17 18:55:25

标签: java java-stream

根据this questionpeek()是懒惰的,这意味着我们应该以某种方式激活它。事实上,要激活它以打印到控制台的东西,我试过这个:

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是什么意思?

2 个答案:

答案 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);