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的建议有误导性吗?
不,这不是误导。JavaDoc声明:
偷看
Stream peek(消费者行动)
返回一个由该流的元素组成的流,在从结果流中消耗元素时,对每个元素执行提供的操作。
JavaDoc非常清楚,peek能够修改流。
例:
如果在java 8中使用peek()和Count()
,peek()
会起作用,但是如果在java 9中使用,除非你有Filter()
,否则不会起作用,因为java 9中的Count()
不会遍历所有元素。
你应该更喜欢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留档所说的,并相应地使用它。
我有以下情况:有一个对象列表-ProductData,其中包含几个字段: 还有一个API,它返回以下对象的列表: 但它会返回带有空“计划名称”字段的对象,因为在提取该对象时不允许这样做。我需要通过外部参照将产品数据与RatingTableRow链接,以便将计划名称设置到RatingTableRow中,因为我以后需要使用此对象,所以我创建了以下代码来实现这一点: 我知道java文档说,不适合这些需求
我已经找到了很多关于RxJava的答案,但我想了解它在Reactor中是如何工作的。 我目前的理解是非常模糊的,我倾向于认为map是同步的,flatMap是异步的,但我不能真正理解它。 以下是一个例子: 我有文件(a
我浏览了几篇文章,基本上都指出Hive用于结构化处理,Pig用于非结构化处理。我们什么时候需要本地地图缩减?你能指出一些使用Pig或Hive但在原生map Reduce中无法解决的场景吗?
我们有一个在50台服务器上使用相同数据集(键值对)的系统。对该数据集的更新数量约为每小时1000次,并且必须在这50台服务器上复制。我们有一个主系统接收这些更新,并负责将这些更新传播到其他服务器。目前,我们每小时以文件的形式将整个数据集(而不是增量更新)同步到所有服务器。然后将这些数据加载到不可变的Koloboke映射中。每个服务器每秒处理大约25000个请求,每个请求对这个映射进行30次查找。在
在闪光灯下,平面图也可以发出一条记录。似乎平面图可以代替地图。有人能告诉我这种情况下的区别吗?谢谢你。
我正在我的Ubuntu 14.04 LTS上评估Intellij Idea 13.1 Ultimate版。 我在我的JSP页面中测试了代码建议,寻找可能的JSTL标签,但是Intellij Idea没有给我任何有用的建议(见截图)。 但是我对我的 Netbeans IDE 做了同样的事情,它给了我很好的建议(见截图)。 这是Intellij Idea的自然行为还是我遗漏了什么?