Kri*_*han 5 java lambda bigdecimal java-8 java-stream
我有一个List<LedgerEntry> ledgerEntries,我需要计算creditAmount和debitAmount的总和.
class LedgerEntry{
private BigDecimal creditAmount;
private BigDecimal debitAmount;
//getters and setters
}
Run Code Online (Sandbox Code Playgroud)
我实现了这个,
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);
Run Code Online (Sandbox Code Playgroud)
这看起来像是在迭代List两次.有没有办法一次性完成这项工作,而无需两次蒸发列表?
只需将其减少为:
BigDecimal sumCreditDebit = ledgeredEntries.stream().map(p -> p.getCreditAmount()
.subtract(p.getDebitAmount()))
.reduce(BigDecimal.ZERO, BigDecimal::add);
Run Code Online (Sandbox Code Playgroud)
您可以减去其中的各个金额map,然后sum使用reduce
ledgerEntries.stream()
.map(e->e.getCreditAmount().subtract(e.getDebitAmount())
.reduce(0,BigDecimal::add);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
188 次 |
| 最近记录: |