Mateus Viccari
Mateus Viccari

Reputation: 7709

How to sum BigDecimal properties of objects in Java8 lambda expression?

Let's get a simple real life example:

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

How to get this in one statement with Java8 lambda expression?

Upvotes: 15

Views: 14240

Answers (2)

user2336315
user2336315

Reputation: 16067

You could also use the reduce method that takes a BiFunction as parameter:

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

Upvotes: 4

Louis Wasserman
Louis Wasserman

Reputation: 198311

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

Upvotes: 36

Related Questions