第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

一次性收集 Java Stream 的平均值

一次性收集 Java Stream 的平均值

PIPIONE 2023-07-13 15:53:53
我正在嘗試找到如何收集一個(gè)襯里中的對(duì)象列表中每個(gè)字段的平均值。這是我正在嘗試執(zhí)行的操作:public class Value {  int a;  int b;  int c;  // rest of the class}現(xiàn)在假設(shè)我有List<Value> values = getMillionValues();我知道要獲得一個(gè)字段的平均值,我可以執(zhí)行以下操作:int averageOfA = values.stream().mapToInt(Value::getA).average()我需要做什么才能獲得每個(gè)變量上面沒(méi)有重復(fù)行的所有值的平均值?也許還有其他一些庫(kù),例如 Guava,可以幫助執(zhí)行此類(lèi)操作?
查看完整描述

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)。


查看完整回答
反對(duì) 回復(fù) 2023-07-13
  • 1 回答
  • 0 關(guān)注
  • 190 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)