Java 8 Stream 的 Map 调用串联和合并为一个的区别

13

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

例如:

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

对决

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

2
我不认为这会有显著的差异。请按照您认为最易读的方式进行操作。 - Louis Wasserman
9
说实话,即使有差异,我认为你的operation1operation2方法的成本将比这个要重要得多。因此,先编写可工作的代码,然后进行基准测试,这是唯一确定性能的方法。 - Tunaki
3
如果处理并行流,我猜例子1可以在操作1上并行化,然后将流输出再次并行化进行操作2,但是例子2只能有一层并行化? - Glenn
2
相关链接:https://dev59.com/u10Z5IYBdhLWcg3wyy11 - Tagir Valeev
2
@stanfordude,当然不是。 - Tagir Valeev
显示剩余5条评论
1个回答

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接