为了账号安全,请及时绑定邮箱和手机立即绑定

.map 与 .peek - Intellij 建议

.map 与 .peek - Intellij 建议

jeck猫 2021-06-20 12:23:18
collection.stream().map(x -> {    if(condition) {        x.setY(true);    }    return x;}).collect(Collectors.toList()));我有一个集合,我想在x满足某个条件时在变量中设置一些东西。我正在这样做,就像上面的代码中显示的那样。它完成了它的工作,并且有效。但是,IntelliJ 建议我.map与.peek. 所以代码看起来像:collection.stream().peek(x -> {    if(condition) {        x.setY(true);    }}).collect(Collectors.toList()));它短了一行,但从我在 peek 文档中读到的:API 注意:此方法的存在主要是为了支持调试,您希望在其中查看元素流经管道中的某个点时的情况:那么,IntelliJ 的建议是否具有误导性?
查看完整描述

2 回答

?
神不在的星期二

TA贡献1963条经验 获得超6个赞

例子:


如果您在 java 8 中使用peek()with count(),peek()会起作用,但是如果您在 java 9 中使用它,除非您有filter(),否则它不会,因为count()在 java 9 中不会遍历所有元素。


你应该更喜欢forEach到peek。


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 文档的说明并相应地使用它。


查看完整回答
反对 回复 2021-06-23
?
撒科打诨

TA贡献1934条经验 获得超2个赞

不没有误导。该JavaDoc的状态:

窥视

Stream peek(消费者行为)

返回一个由该流的元素组成的流,另外 在每个元素上执行提供的操作,因为元素从结果流中被消耗

JavaDoc 很清楚,peek 有修改流的能力。


查看完整回答
反对 回复 2021-06-23
  • 2 回答
  • 0 关注
  • 281 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信