当前位置: 首页 > 知识库问答 >
问题:

地图vs。peek-Intellij建议[重复]

柯建业
2023-03-14
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个答案

安泰平
2023-03-14

不,这不是误导。JavaDoc声明:

偷看

Stream peek(消费者行动)

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

JavaDoc非常清楚,peek能够修改流。

帅令雪
2023-03-14

例:

如果在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的自然行为还是我遗漏了什么?