我有一個List<LedgerEntry> ledgerEntries
,我需要計算creditAmount和debitAmount的總和。Java 8在一次迭代中求和兩個對象屬性
class LedgerEntry{
private BigDecimal creditAmount;
private BigDecimal debitAmount;
//getters and setters
}
我已經實現了本作,
BigDecimal creditTotal = ledgeredEntries.stream().map(p ->p.getCreditAmount()).
reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal debitTotal = ledgeredEntries.stream().map(p ->p.getDebitAmount()).
reduce(BigDecimal.ZERO, BigDecimal::add);
//...
//Use creditTotal, debitTotal later
這看起來像我遍歷列表的兩倍。有沒有辦法一次完成這項工作,而無需兩次蒸汽清單?
前的Java版本8
BigDecimal creditTotal = BigDecimal.ZERO;
BigDecimal debitTotal = BigDecimal.ZERO;
for(LedgerEntry entry : ledgerEntries){
creditTotal = creditTotal.add(entry.getCreditAmount());
debitTotal = debitTotal.add(entry.getDebitAmount());
}
你爲什麼要使用流?您的「Pre Java 8」版本也是100%有效的Java 8,並且(因爲它實際上並沒有做任何事情,因爲BigDecimal是不可變的,所以它的可讀性和可維護性更高且可維護性更高)試圖一次計算兩個和的解決方案。 – Hoopje
@KrazyKalle:謝謝。編輯 – Krishan
@KrazyKalle。是。你認爲我的意思是括號內的句子(固定時......不可變)? – Hoopje