Ich habe eine List<LedgerEntry> ledgerEntries
und ich muss die Summe von creditAmount und debitAmount berechnen.Streams: Berechnen Sie die Differenz der Summen auf einmal
class LedgerEntry{
private BigDecimal creditAmount;
private BigDecimal debitAmount;
//getters and setters
}
ich umgesetzt haben, 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);
BigDecimal sumCreditDebit = creditTotal.subtract(debitTotal);
Das sieht aus wie ich das über List
zweimal laufen bin. Gibt es eine Möglichkeit, dies auf einmal zu erledigen, ohne die Liste zweimal durchspielen zu müssen?
Danke. Das war schnell. Auf die gleiche Anmerkung, was ist, wenn ich die zwei Werte getrennt brauche (dh: creditTotal und debitTotal getrennt). – Krishan
@ Krishan Willkommen. Können Sie näher erläutern, was Sie meinen, indem Sie die beiden Werte getrennt benötigen? – CKing
Genau wie in meiner Frage, wenn ich creditTotal und debotTotal Werte separat brauche, um später verwendet zu werden, kann ich das tun, indem ich nur einmal durch die Liste iteriere? Mit stream() zweimal für die gleiche Liste scheint zweimal über die Liste zu iterieren? Oder ist das nicht der Fall und der Compiler zaubert etwas, um das Streaming zu optimieren? – Krishan