У меня есть List<LedgerEntry> ledgerEntries
и мне нужно рассчитать сумму creditAmount и debitAmount.Потоки: рассчитать разницу итогов за один раз
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);
Это выглядит как я итерация над List
дважды. Есть ли способ сделать это за один раз, не перепуская список дважды?
Спасибо. Это было быстро. На том же примечании, что, если мне нужны два значения отдельно (то есть: creditTotal и debitTotal отдельно). – Krishan
@Krishan Добро пожаловать. Можете ли вы рассказать о том, что вы подразумеваете, требуя двух значений отдельно? – CKing
Как и в моем вопросе, если мне нужны значения creditTotal и debitTotal, которые будут использоваться позже, могу ли я сделать это, просто повторив список один раз? используя stream() дважды для одного и того же списка, похоже на повторение по списку дважды? Или это не так, и компилятор делает некоторую магию для оптимизации потоковой передачи? – Krishan