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());
【问题讨论】:
我不希望这会产生重大影响。做任何你认为最易读的事情。 老实说,我认为您的方法operation1
和operation2
的成本将比这更多重要,即使存在差异。因此,编写工作代码,然后进行基准测试,这是唯一确定的方法。
我猜如果处理并行流,示例 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() 中链接构造函数调用和设置器