2016-06-30 18 views
1

Ich habe eine einfache Klasse:Summe BigDecimal Werte in Liste mit Lambda

class Simple { 
    private String count; 
    private BigDecimal amount; 
    private String label; 
} 

und haben eine Liste: List<Simple> simples = new ArrayList<>(); , wie ich alle Beträge aller simples in Liste mit Lambda in Java 8 fassen kann?

+0

sprechen Sie über den Stream API? – niceman

+0

ja! Kann ich alle Beträge mit Stream API hinzufügen? –

Antwort

2

Es ist ganz einfach, mit einem Bach und einem Druckminderer:

BigDecimal sum = simples 
    .stream() 
    .map(Simple::getAmount) 
    .reduce(BigDecimal::add) 
    .get(); 
+2

Sie können '.orElse (BigDecimal.ZERO)' anstelle von '.get()' verwenden, um ein nützliches Ergebnis für leere Listen zu erhalten. Oder verwenden Sie '.reduce (BigDecimal.ZERO, BigDecimal :: add)' an erster Stelle, so dass Sie sich nicht mit einem 'Optional' beschäftigen müssen ... – Holger

+0

Mein Code gibt Fehler bei BigDecimal :: add sagt" Can not resolve method add " Irgendwelche Hilfe? –

2

Versuchen:

BigInteger sum = simples.stream() 
         .map(Simple::getAmount) 
         .reduce(BigInteger.ZERO, BigInteger::add);