Java 8 Stream 映射调用字符串与合并为一个 [重复]

Posted

技术标签:

【中文标题】Java 8 Stream 映射调用字符串与合并为一个 [重复]【英文标题】:Java 8 Stream string of map calls versus combining into one [duplicate] 【发布时间】:2016-05-05 00:57:51 【问题描述】:

在使用 Java 8 Stream API 时,将多个 map 调用合并为一个是否有好处,还是不会真正影响性能?

例如:

stream.map(SomeClass::operation1).map(SomeClass::operation2);

stream.map(o -> o.operation1().operation2());

【问题讨论】:

我不希望这会产生重大影响。做任何你认为最易读的事情。 老实说,我认为您的方法operation1operation2 的成本将比这更多重要,即使存在差异。因此,编写工作代码,然后进行基准测试,这是唯一确定的方法。 我猜如果处理并行流,示例 1 可以在 operation1 上并行化,流输出再次为 operation2 并行化,但示例 2 将只有一级并行化? 相关:***.com/q/31058755/4856258 @stanfordude,当然不是。 【参考方案1】:

对于大多数业务逻辑操作来说,这里的性能开销可以忽略不计。您在管道中有两个额外的方法调用(在实际应用程序中可能不会被 JIT 编译器内联)。此外,您有更长的调用堆栈(一帧),所以如果您在流操作中有异常,它的创建会慢一点。如果您的流执行非常低级的操作(例如简单的数学),这些事情可能很重要。然而,大多数实际问题的计算成本要大得多,因此相对性能下降不太可能引起注意。而且,如果您实际上执行了一个简单的数学运算并需要性能,最好还是坚持使用普通的旧 for 循环。使用您认为更具可读性的版本,不要执行过早的优化。

【讨论】:

以上是关于Java 8 Stream 映射调用字符串与合并为一个 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用 Java 8 Stream API 合并两个 Map<String, Integer>

Java 8 - 在 stream.map() 中链接构造函数调用和设置器

Java 8 lambda Stream list to Map key 重复 value合并到Collection

通过 Stream API 迭代和减少 Java 映射的值

Stream流

为啥不在 Stream API 中使用 reduce 来合并多个映射?