如何在lambda迭代和正常循环之间做出决定?

Kon*_*ine 10 java iteration lambda jvm java-8

自从他引入Java 8以来,我真的迷上了lambdas,并且尽可能地开始使用它们,主要是为了开始习惯它们.最常见的用法之一是当我们想要迭代并对一组对象进行操作时,在这种情况下我要么求助于forEach或者stream().我很少写旧for(T t : Ts)循环,我差点忘了for(int i = 0.....).

然而,我们前几天与我的主管讨论过这个问题,他告诉我,lambdas并不总是最好的选择,有时会阻碍性能.从我在这个新功能上看过的一个讲座中我感觉lambda迭代总是被编译器完全优化,并且(总是?)比裸迭代更好,但他不同意.这是真的?如果是,我如何区分每种方案中的最佳解决方案?

PS:我不是在谈论建议申请的案例parallelStream.显然那些会更快.

Zby*_*000 1

这取决于具体的实施。

一般来说,forEach方法和foreach循环Iterator通常具有非常相似的性能,因为它们使用相似的抽象级别。stream()通常速度较慢(通常慢 50-70%),因为它添加了另一个级别来提供对底层集合的访问。

一般来说,它的优点stream()是可能的并行性和易于链接的操作以及 JDK 提供的许多可重用的操作。