Stream.of("one", "two", "three", "four").peek(e -> System.out.println(e));这样不会有任何的输出;Stream.of("one", "two", "three", "four").peek(e -> System.out.println(e)).collect(Collectors.toList());这样输出:onetwothreefourStream.of("one", "two", "three", "four") .peek(e -> System.out.println("Peeked value: " + e)) .map(String::toUpperCase) .peek(e -> System.out.println("Mapped value: " + e)) .collect(Collectors.toList());这样输出:Peeked value: oneMapped value: ONEPeeked value: twoMapped value: TWOPeeked value: threeMapped value: THREEPeeked value: fourMapped value: FOUR知道 peek() 方法接受一个实现了 consumer 接口的类,但是实在是搞不清楚到底它是如何运行的。
5 回答

慕村225694
TA贡献1880条经验 获得超4个赞

富国沪深
TA贡献1790条经验 获得超9个赞
java8流中所有的操作都是蓄而不发的,只有执行foreach,collect等终结操作时,流的操作才会执行。
而且流内部会自动进行优化,只要得到想要的解决就不会继续进行计算了。
peek是个中间操作,它提供了一种对流中所有元素操作的方法,而不会把这个流消费掉(foreach会把流消费掉),然后你可以继续对流进行其他操作。

慕哥9229398
TA贡献1877条经验 获得超6个赞
stream 分 中间操作 和 终端操作, (foreach, collect count)属于终端操作;
peek: 生成一个包含原Stream的所有元素的新Stream,同时会提供一个消费函数(Consumer实例),新Stream每个元素被消费的时候都会执行给定的消费函数;
添加回答
举报
0/150
提交
取消