自从他引入 Java 8 后,我就真正迷上了 lambdas 并开始尽可能地使用它们,主要是开始习惯它们。最常见的用法之一是当我们想要迭代并处理一组对象时,在这种情况下,我要么求助于 forEach
或 stream()
.我很少写旧的for(T t : Ts)
循环,我几乎忘记了 for(int i = 0.....)
.
然而,前几天我们和我的主管讨论了这个问题,他告诉我 lambdas 并不总是最好的选择,有时会阻碍性能。从我看到的关于这个新特性的讲座中,我感觉到 lambda 迭代总是由编译器完全优化,并且(总是?)比裸迭代更好,但他不同意。这是真的?如果是,我如何区分每个场景中的最佳解决方案?
P.S: 我是 不是 说说推荐申请的案例parallelStream
.显然,那些会更快。
最佳答案
这取决于具体的实现。
一般情况forEach
方法和 foreach
循环 Iterator
通常具有非常相似的性能,因为它们使用相似的抽象级别。 stream()
通常较慢(通常慢 50-70%),因为它增加了另一个级别,提供对底层集合的访问。stream()
的优点通常是可能的并行性和易于链接的操作与 JDK 提供的许多可重用的操作。
关于java - 如何在 lambda 迭代和普通循环之间做出决定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38092171/