私はList<LedgerEntry> ledgerEntries
です。私はcreditAmountとdebitAmountの合計を計算する必要があります。私は二回List
を反復処理していますように私はこれを実装したストリーム:1回の合計の差を計算します
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);
BigDecimal sumCreditDebit = creditTotal.subtract(debitTotal);
これが見えます。リストを2回スチームしなくても、これを1回で済ませる方法はありますか?
ありがとうございます。それは速かった。 同じメモでは、2つの値が別々に必要な場合(つまり、creditTotalとdebitTotalを別々に)どうすればよいでしょうか。 – Krishan
@Krishanようこそ。あなたは別々に2つの値を必要とすることによってあなたが意味することを詳しく説明できますか? – CKing
私の質問と同じように、後で使用するcreditTotalとdebitTotalの値が別々に必要な場合は、リストを一度反復するだけでそれを行うことができますか?同じリストに対してstream()を2回使用すると、リストを2回反復するように見えますか?それとも、コンパイラはストリーミングを最適化するためにいくつかの魔法をしていますか? – Krishan