防止在Java8的map()reduce()中使用空指针进行bigdecimal加法

iugsix8n  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(1086)

这个问题在这里已经有答案了

在java 8中Map后过滤空值[重复](1个答案)
在java8中使用lambda仅在不为null时过滤值(6个答案)
上个月关门了。
我试图将给定产品的所有价格相加为:

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

我试着打印 bigDecimal ,只要我们得到 null 我们要走了 java.lang.NullPointerException ,有没有更好的方法添加到 java 8 通过阻止任何类型的例外?

qnzebej0

qnzebej01#

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

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);

相关问题