如何在Java8 lambda表达式中求和对象的BigDecimal属性?

时间:2015-01-20 17:44:35

标签: java java-8

让我们来看一个简单的现实生活例子:

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

如何使用Java8 lambda表达式在一个语句中获取它?

2 个答案:

答案 0 :(得分:25)

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

答案 1 :(得分:4)

您还可以使用将BiFunction作为参数的reduce方法:

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