java - 如何在 lambda 迭代和普通循环之间做出决定?

标签 java lambda jvm java-8 iteration

自从他引入 Java 8 后,我就真正迷上了 lambdas 并开始尽可能地使用它们,主要是开始习惯它们。最常见的用法之一是当我们想要迭代并处理一组对象时,在这种情况下,我要么求助于 forEachstream() .我很少写旧的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/

相关文章:

java - 向 JFrame 添加更多组件

c# - Linq to SQL .Any() 有多个条件?

java - 动态加载的 JAR/等。在同一个 JVM 容器中

java - 为什么 Java 比其他解释型语言有更好的性能?

java - -XstartOnFirstThread VM 参数的作用/含义是什么?

java - Thymeleaf:通过错误代码显示全局错误

java - 哪个是eclipse kepler最好的html/css/javascript/jquery文本编辑器插件?

java - Netty POST 表单输入类型

C++ lambda 模糊调用

java - 如何使用java 8(LAMBDA)检查集合是否所有周期对象都是连续周期