防止在 java 8 的 map() reduce() 中为 BigDecimal 添加空指针

imp*_*nce 0 java collections java-8 java-stream

我正在尝试将给定产品的所有价格添加为:

 BigDecimal getTotalPrice(List<Product> products) {
        return products.stream()
                .map(Product::getPrice)
                .peek(bigDecimal -> System.out.println(bigDecimal))
                .reduce(BigDecimal.ZERO, BigDecimal::add);
    }
Run Code Online (Sandbox Code Playgroud)

我试着打印所有的值bigDecimal,每当我们得到的价值null,我们正在java.lang.NullPointerException,有没有另外的什么更好的办法java 8,防止任何类型的异常?

Jer*_*eke 6

我建议添加中间过滤步骤:

return products.stream()
               .filter(Objects::nonNull) // If products can contain null values
               .map(Product::getPrice)
               .filter(Objects::nonNull) // If price can be null
               .peek(bigDecimal -> System.out.println(bigDecimal))
               .reduce(BigDecimal.ZERO, BigDecimal::add);
Run Code Online (Sandbox Code Playgroud)