首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.map与.peek - Intellij建议

.map与.peek - Intellij建议
EN

Stack Overflow用户
提问于 2018-08-02 07:43:30
回答 2查看 3.2K关注 0票数 7
代码语言:javascript
复制
collection.stream().map(x -> {
    if(condition) {
        x.setY(true);
    }
    return x;
}).collect(Collectors.toList()));

我有一个集合,当满足某个条件时,我想在x变量中设置一些东西。我这样做就像上面的代码所显示的那样。它做好了它的工作,而且起了作用。然而,IntelliJ建议我将.map.peek交换。所以代码看起来是:

代码语言:javascript
复制
collection.stream().peek(x -> {
    if(condition) {
        x.setY(true);
    }
}).collect(Collectors.toList()));

它缩短了一行,但根据我在窥视文档上所读到的内容:

API注意:此方法的存在主要是为了支持调试,在调试过程中,当元素流经管道中的某个点时,您希望看到它们:

那么,IntelliJ的建议是否具有误导性?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-02 07:53:23

示例:

如果在java 8中使用peek()count(),那么peek()就能工作,但是如果在java 9中使用它,除非您有filter(),否则它不会工作,因为java 9中的count()并不会覆盖所有元素。

您应该更喜欢forEach而不是peek

代码语言:javascript
复制
List<Integer> l = new ArrayList<>(Arrays.asList(1,2,3));
long c = l.stream().peek(System.out::println).count();
System.out.println(c);

试试上面在java 8和9中的代码,看看不同之处。我的观点是,您应该遵循API文档的内容,并相应地使用它。

票数 6
EN

Stack Overflow用户

发布于 2018-08-02 07:52:46

不,不是误导。JavaDoc指出:

窥视 小溪窥视(消费者诉讼) 返回一个由该流的元素组成的流,此外,对每个元素执行提供的操作,因为元素是从结果流中消耗的

JavaDoc非常清楚,peek具有修改流的能力。

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

https://stackoverflow.com/questions/51648176

复制
相关文章

相似问题

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