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

Mat*_*ari 11 java java-8

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

BigDecimal invoiceValue = BigDecimal.ZERO;
for (InvoiceItem i : invoiceItems) {
    invoiceValue = invoiceValue.add(i.getItemValue());
}
Run Code Online (Sandbox Code Playgroud)

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

Lou*_*man 25

invoiceItems.stream()
    .map(Item::getItemValue)
    .reduce(BigDecimal.ZERO, BigDecimal::add)
Run Code Online (Sandbox Code Playgroud)

  • 你仍然可以使用`.reduce(BigDecimal :: add).orElse(BigDecimal.ZERO)`但它不再与问题中的代码完全相同了...... (4认同)
  • @JasonReid:不,在这种情况下它将返回一个`Optional <BigDecimal>`,这不是真正需要的东西. (2认同)