【发布时间】:2016-04-10 11:27:29
【问题描述】:
在大多数情况下,Java 8 流允许的代码比老式的for 循环更具可读性。但是,根据我自己的经验和阅读的内容,使用流而不是 for 循环可能会导致性能下降(或偶尔提高),这有时难以预测。
在大型项目中,为每个循环编写基准测试似乎并不可行,因此在决定是否将for 循环替换为流时,关键因素是什么(例如,集合的预期大小、通过过滤删除的值的预期百分比、迭代操作的复杂性、归约或聚合的类型等)这可能表明将导致的性能变化?
注意:这是my earlier question 的缩小版,由于过于宽泛而被关闭(并且并行流的各个方面都很好地涵盖了in another SO question),所以让我们将其限制为顺序流.
【问题讨论】:
-
对于 99% 的情况,答案很简单:编写清晰、可读、可维护且明显正确的代码。虽然人们可能会无休止地担心性能,但在大多数情况下,以美元衡量的实际成本差异为零(因为大多数代码“足够快”。)另一方面,出错可能会产生真正的美元成本. (而且,如果您属于需要担心性能的不到 1%,那么您已经知道这一点,并且您已经在测量方法上进行了大量投资。)
-
感谢那些回答或评论的人。我的问题基于法国杂志(Programmez,2016 年 1 月)中的一篇文章,其中一些顾问将 B2C 网站的代码分支并重构以用流替换许多
for循环。根据性能测试(在最坏的情况下方法执行时间大约加倍),他们无法说服产品负责人继续在主分支中进行重构。很难向产品负责人推销“我们将花一周时间改进代码。我们不会添加任何功能,产品运行速度会更慢。”
标签: java lambda java-8 java-stream