我有過一些模型對象返回屬性的平均值的方法:如何使用流操作來計算列表中的值的平均值,省略一些?
List<Activity> activities = ...;
double effortSum = 0;
double effortCount = 0;
activities.stream().forEach(a -> {
double effort = a.getEffort();
if (effort != Activity.NULL) {
effortCount++; < Compilation error, local variable
effortSum += effort; < Compilation error, local variable
}
});
但是,上述嘗試無法編譯,如上所述。唯一的解決方案是使用AtomicReference
到Double
對象,但這看起來十分骯髒,並且增加了大量的混淆,應該是是一個簡單的操作。 (或者添加番石榴並獲得AtomicDouble
,但達到相同的結論。)
是否存在使用新的Java 8循環修改局部變量的「最佳實踐」策略?
的活動相關代碼:
public class Activity {
public static final double NULL = Double.MIN_VALUE;
private double effort = NULL;
public void setEffort(double effort) { this.effort = effort; }
public double getEffort() { return this.effort; }
...
}
你可以在你的OP中包含'activities'聲明嗎? –
當然,我添加了相關的位。 –