首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java 8流peek api

Java 8流peek api
EN

Stack Overflow用户
提问于 2015-04-12 04:38:30
回答 4查看 19.5K关注 0票数 32

我使用peek尝试了以下Java8代码片段。

代码语言:javascript
复制
List<String> list = Arrays.asList("Bender", "Fry", "Leela");
list.stream().peek(System.out::println);

然而,控制台上没有打印任何内容。如果我这样做了:

代码语言:javascript
复制
list.stream().peek(System.out::println).forEach(System.out::println);

我看到了下面的内容,它输出了peek和foreach调用。

代码语言:javascript
复制
Bender
Bender
Fry
Fry
Leela
Leela

foreachpeek都接受(Consumer<? super T> action),那么为什么输出是不同的呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-04-12 07:53:11

Javadoc提到了以下几点:

中间操作返回一个新流。它们总是很懒;执行一个中间操作(例如filter() )实际上并不执行任何筛选,而是创建一个新流,在遍历时,该流包含与给定谓词匹配的初始流的元素。在执行管道的终端操作之前,管道源的遍历不会开始。

peek是一个中间操作,没有任何作用。在应用像foreach这样的终端操作时,结果确实会如图所示被打印出来。

票数 40
EN

Stack Overflow用户

发布于 2015-04-12 04:43:13

peek的文档显示

返回一个由该流的元素组成的流,另外,在从结果流中消耗元素时,对每个元素执行提供的操作。这是一个中间操作。

因此,您必须对结果流做一些操作,System.out.println才能做任何事情。

票数 6
EN

Stack Overflow用户

发布于 2015-04-12 04:43:24

来自上用于peek方法的文档:

...additionally在每个元素上执行提供的操作,作为元素从结果流中消耗

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29586014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档