2015-01-20 20 views

risposta

25
invoiceItems.stream() 
    .map(Item::getItemValue) 
    .reduce(BigDecimal.ZERO, BigDecimal::add) 
+0

E 'stato veloce come un proiettile! Che strano nome a questo metodo però. Grazie! –

+0

Penso che il BigDecimal.ZERO sia un parametro opzionale in questo caso, dal momento che senza di esso si applicherà solo "aggiungi" ai primi due elementi del flusso per dare il via alle cose. –

+2

@JasonReid: No, in tal caso restituirà un 'Opzionale ', che in realtà non è quello che si desidera. –

4

Si potrebbe anche usare il metodo che prende un BiFunction come parametro di ridurre:

BigDecimal invoiceValue = invoiceItems.stream().reduce(BigDecimal.ZERO, (bd, item) -> bd.add(item.getItemValue()), BigDecimal::add); 
+0

Perché si deve definire il metodo add in il combinatore? Hai già definito la funzionalità di aggiunta nel tuo accumulatore. – Chris311

Problemi correlati