J'ai un List<LedgerEntry> ledgerEntries
et j'ai besoin de calculer la somme de creditAmount et debitAmount.Streams: Calculez la différence des totaux en une fois
class LedgerEntry{
private BigDecimal creditAmount;
private BigDecimal debitAmount;
//getters and setters
}
J'ai mis en œuvre ce que,
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);
Cela ressemble j'itérer sur la List
deux fois. Y a-t-il un moyen de faire cela en une fois sans avoir à faire défiler la liste deux fois?
Merci. C'était rapide. Sur la même note, que se passe-t-il si j'ai besoin des deux valeurs séparément (à savoir: creditTotal et debitTotal séparément). – Krishan
@Krishan Bienvenue. Pouvez-vous préciser ce que vous voulez dire en ayant besoin des deux valeurs séparément? – CKing
Tout comme dans ma question, si j'ai besoin de valeurs de creditTotal et de debitTotal séparément pour pouvoir les utiliser plus tard, est-ce que je peux le faire en parcourant simplement la liste une fois? L'utilisation de stream() deux fois pour la même liste semble être répétée deux fois sur la liste? Ou n'est-ce pas le cas et le compilateur fait un peu de magie pour optimiser le streaming? – Krishan