1 回答

TA貢獻(xiàn)1866條經(jīng)驗(yàn) 獲得超5個(gè)贊
說(shuō)真的,使用 for 循環(huán)。
int count = 0, sumA = 0, sumB = 0, sumC = 0;
for (Value v : values) {
sumA += v.getA();
sumB += v.getB();
sumC += v.getC();
count++;
}
double avgA = ((double) sumA) / count;
double avgB = ((double) sumB) / count;
double avgC = ((double) sumC) / count;
說(shuō)真的,使用上面的代碼。
話(huà)雖如此,您應(yīng)該使用上面的代碼,但您可以使用流來(lái)完成。
您需要一些值持有者(平均值是 a double,因此您的Value類(lèi)無(wú)法存儲(chǔ)平均值):
class AveragesResult {
public final double a, b, c;
public AveragesResult(double a, double b, double c) {
this.a = a;
this.b = b;
this.c = c;
}
}
class AveragesIntermediate {
public final double a, b;
public AverageIntermediate(double a, double b) {
this.a = a;
this.b = b;
}
}
現(xiàn)在我們已經(jīng)有了樣板文件(為了更好地衡量,您應(yīng)該實(shí)現(xiàn)hashCode、equalsand toString,并添加一些 getter),我們終于可以以簡(jiǎn)短而緊湊的方式編寫(xiě)流:
values.stream().collect(teeing(
teeing(averagingInt(Value::getA), averagingInt(Value::getB), AveragesIntermediate::new),
averagingInt(Value::getC),
(ir, avgC) -> new AveragesResult(ir.a, ir.b, avgC));
那不是很難嗎?確保您已靜態(tài)導(dǎo)入所有 Collector 函數(shù)(所有這些函數(shù)看起來(lái)都很難看Collectors.)并且您使用的Collectors.teeing是 Java 12(Java 12 中的新增功能)。
不要使用它,使用一個(gè)好的舊for循環(huán)。
添加回答
舉報(bào)