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

性能差异:map()与peek()使用setter[重复]

阎枫涟
2023-03-14

我想知道下面两个场景中是否有任何性能差异——peek()和map()带返回:

Set<Item> convertedItems = items
                .stream()
                .filter(item -> ItemType.POSTER.equals(item.getType()))
                .peek(item -> item.setType(ItemType.LOGO))
                .collect(toSet());

Set<Item> convertedItems = items
                .stream()
                .filter(item -> ItemType.POSTER.equals(item.getType()))
                .map(item -> {
                    iitem.setType(ItemType.LOGO);
                    return item;
                })
                .collect(toSet());

我在stackoverflow上读了几篇关于map()和peek()中setter的文章,我只发现了一个关于性能的信息。它说带有返回的map()会更糟,但没有解释为什么:如何在Stream链中调用setter

共有1个答案

伍成仁
2023-03-14

它并不完全回答你的问题,但会for each可能更明智。因为我认为peekmap都不是你需要的。

请注意,peek用于调试,来源:https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html#peek-爪哇。util。作用消费者-

我认为以下代码可能更为优化:

items.forEach(s -> s.setTitle("second"));
 类似资料:
  • 我有以下情况:有一个对象列表-ProductData,其中包含几个字段: 还有一个API,它返回以下对象的列表: 但它会返回带有空“计划名称”字段的对象,因为在提取该对象时不允许这样做。我需要通过外部参照将产品数据与RatingTableRow链接,以便将计划名称设置到RatingTableRow中,因为我以后需要使用此对象,所以我创建了以下代码来实现这一点: 我知道java文档说,不适合这些需求

  • 你能用基本的例子告诉我什么时候使用这些矢量化方法吗? 我看到是方法,而其余的是方法。不过,我对和方法感到困惑。为什么我们有两种方法用于将函数应用于DataFrame?同样,简单的例子说明用法将是伟大的!

  • 这不是重复我的问题,我查了一下,更多的是关于内部匿名类。 我对Lambda表达式很好奇,并测试了以下内容: 如果给定一个数组中有1000个索引,那么对于一个包含1000个索引的循环,删除哪个条目会更快 最初的结果并不令人惊讶,因为我不知道自己会想出什么: 但后来,我决定将常量改为一百万,结果如下: 为了让阅读更简单,以下是结果: 我有以下问题: > 这背后的魔力是什么?当要使用的索引是*100时,

  • 问题内容: 有一个共识,使用接口比使用类更好。我当然同意:库法接受ArrayList替代的List将是一个废话。 也有一个共识,就是性能总是一样的。在这里,我的基准要求不同。 接口和抽象类结果都有1到4种实现。当使用两个以上的实现时,性能开始出现差异。我正在寻找这种行为的解释(以及错误共识的由来)。 问题答案: 有一个共识,使用接口比使用类更好。 这太简单了。接口和抽象类都 具有彼此之间的优势。

  • 是的,这是一个老话题,但我仍然有一些困惑。 在Java,人们说: > 如果我随机访问它的元素,ArrayList比LinkedList快。我认为随机存取意味着“给我第n个元素”。为什么ArrayList更快? LinkedList的删除速度比ArrayList快。我理解这一点。ArrayList速度较慢,因为需要重新分配内部备份阵列。代码说明: LinkedList的插入速度比ArrayList快

  • 问题内容: 一个非常简单的问题,但这是来自C / C ++人员进入Java的复杂性的。 我知道我可以启动jUnit和自己的一些性能测试来获得答案。但我只是想知道这是否在那里。 在性能方面,String.replaceAll()和Matcher.replaceAll()(在从Regex.Pattern创建的Matcher对象上)之间是否存在已知差异? 此外,两者在高级API方面的区别是什么?(不可变