Как суммировать BigDecimal свойства объектов в выражении lambda Java8?

Позвольте получить простой пример реальной жизни:

BigDecimal invoiceValue = BigDecimal.ZERO;
for (InvoiceItem i : invoiceItems) {
    invoiceValue = invoiceValue.add(i.getItemValue());
}

Как получить это в одном выражении с выражением лямбда Java8?

Ответ 1

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

Ответ 2

Вы также можете использовать метод уменьшения, который принимает параметр BiFunction в качестве параметра:

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