小编R H*_*tra的帖子

为什么java收集流每次运行两次getter?

我有一个带有项目的List,其中每个项目都是一个对象,我有一个我感兴趣的getter方法.我想在完整列表上运行以总结所有这些getter结果.

当我使用java 8流时,它看起来像这样:

double currentProduction = itemList.stream().collect(
    Collectors.summingDouble((e) -> e.getProduction(param)));
Run Code Online (Sandbox Code Playgroud)

在普通的旧java中,它看起来像这样:

for (Item item : itemList) {
    currentProduction += item.getProduction(param);
}
Run Code Online (Sandbox Code Playgroud)

两种方法产生完全相同的结果,但我的记录器报告,对于每个项目实例,在java 8流解决方案的情况下,getProduction()方法运行TWICE.在普通的旧java列表迭代解决方案中,getProduction方法只是按预期运行一次.

由于getProduction方法成本很高,这对我来说是一个问题.

为什么是这样?我能做些什么(除了只使用for循环)?

java performance java-8 java-stream collectors

9
推荐指数
1
解决办法
397
查看次数

标签 统计

collectors ×1

java ×1

java-8 ×1

java-stream ×1

performance ×1