gpt4 book ai didi

java - Collector 或 ForEach 用于添加多个元素

转载 作者:行者123 更新时间:2023-12-01 12:25:53 25 4
gpt4 key购买 nike

我想通过合并两个流来填充一个列表,对它们执行一些操作,最后获取所有元素并存储它们。我想到了两种方法:

Collection 家:

myList.addAll(Stream.concat(stream1, stream2)
.flatMap(foo -> someMethod(foo).stream())
.collect(Collectors.toList()));

ForEach:

Stream.concat(stream1, stream2)
.flatMap(foo -> someMethod(foo ).stream())
.forEach(myList::add);

是否存在性能差异导致某种解决方案无法使用?

第一个收集器使用方法是否创建一个临时列表,该列表会立即被 List#addAll 使用并丢弃?

编辑该问题旨在生成以某种方式解释功能和/或性能的答案。我不想开始争论什么方式“看起来更好”等。这将是高度基于意见的。

最佳答案

我不是流 API 方面的专家,但我希望 collect 是一个更好的选择,因为它包含更多信息。

foreach 方法无法提前知道流的大小、为 myList 分配正确的大小等。

理论上,collect 方法可能可以获得更多可用于优化的信息。作为一般经验法则,在可能的情况下,我更喜欢使用一次性执行整个操作的方法,而不是迭代它们。在最坏的情况下,该操作将仅在内部进行迭代。

这与旧式集合处理中的方式相同,您会喜欢 list.addAll(x) 而不是迭代 x 并添加每个元素。 addAll 有可能进行您不知道的优化,并且在最坏的情况下将获得与手动迭代相同的性能。

关于java - Collector 或 ForEach 用于添加多个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26337175/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com