BigDecimal getInterest(List<Investment> investments) {
BigDecimal interest = BigDecimal.ZERO;
for (Investment i: investments) {
i.getTransactions().stream()
.map(Transaction::getAmount)
.forEach(interest::add);
}
return interest;
}
此方法的問題是它始終返回零。它看起來像.forEach()
沒有消耗它的論點。但是,如果我按照下面的方式編寫它,一切工作正常。任何人都知道爲什麼第一種方法不起作用?不適用於循環的流
BigDecimal getInterest(List<Investment> investments) {
BigDecimal interest = BigDecimal.ZERO;
for (Investment i: investments) {
interestPaid = interest.add(i.getTransactions().stream()
.map(Transaction::getAmount)
.reduce(BigDecimal.ZERO, BigDecimal::add));
}
return interest;
}
也許是因爲BigDecimal是不可變的,因此它在調用add時而不是更新原始調用時返回新實例? – Koekje
@Eran:這是'BigDecimal',這是這裏的問題。 – fabian
@fabian我錯過了,謝謝。其實它是BigDecimal,但同樣的問題。 – Eran