【发布时间】:2016-11-12 21:39:21
【问题描述】:
我很好奇,如何在一个 java8 流中总结多个变量。
Integer wCPU = 0;
Double wnetwork = 0.0;
Double wMem = 0.0;
this.slaContractList.forEach(sla -> {
wCPU += sla.getNumberOfCPUs();
wnetwork += sla.getNetworkBandwith();
wMem += sla.getMemory();
});
但是,这不会编译,因为 lambda 表达式中的变量应该是 final。
【问题讨论】:
-
你想要一个自定义收集器,看stackoverflow.com/questions/37187541/…
-
hack 的缺点是什么?它似乎有更少的代码行,这很好。
-
你说的......这是一个黑客。并行运行它,它可能不会产生正确的输出,因为
+=,如++,is not an atomic operation。 -
您如何看待@Lukasz 添加的最新答案,该答案看起来也很简洁,并且没有 Hack 的缺点。
标签: java collections java-8 sum java-stream