Ich habe eine List<LedgerEntry> ledgerEntries
und ich muss die Summen von creditAmount und debitAmount berechnen.Java 8 Summe zwei Objekteigenschaften in einer Iteration
class LedgerEntry{
private BigDecimal creditAmount;
private BigDecimal debitAmount;
//getters and setters
}
Ich habe implementiert dies als,
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);
//...
//Use creditTotal, debitTotal later
Das sieht aus wie ich über die Liste zweimal bin laufen. Gibt es eine Möglichkeit, dies auf einmal zu erledigen, ohne die Liste zweimal durchspielen zu müssen?
Pre Java 8 Version
BigDecimal creditTotal = BigDecimal.ZERO;
BigDecimal debitTotal = BigDecimal.ZERO;
for(LedgerEntry entry : ledgerEntries){
creditTotal = creditTotal.add(entry.getCreditAmount());
debitTotal = debitTotal.add(entry.getDebitAmount());
}
Warum Sie Ströme verwenden wollen? Ihre "Pre Java 8" -Version ist auch 100% valides Java 8 und (wenn es für die Tatsache, dass es nichts wirklich tut, weil BigDecimal unveränderlich ist) besser lesbar und wartbar (und wahrscheinlich performanter) als jeder Stream ist Lösung, die versucht, die beiden Summen auf einmal zu berechnen. – Hoopje
@KrazyKalle: Danke. tat die Bearbeitung – Krishan
@KrazyKalle. Ja. Was meinst du mit dem Satz zwischen den Klammern (wenn fest ... unveränderlich)? – Hoopje