防止java 8的map()reduce()中的空指针用于BigDecimal加法

防止java 8的map()reduce()中的空指针用于BigDecimal加法,java,collections,java-8,java-stream,Java,Collections,Java 8,Java Stream,我试图将给定产品的所有价格相加为: BigDecimal getTotalPrice(List<Product> products) { return products.stream() .map(Product::getPrice) .peek(bigDecimal -> System.out.println(bigDecimal)) .reduce(BigDec

我试图将给定产品的所有价格相加为:

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

我试着打印
bigDecimal
的所有值,每当我们得到值为
null
时,我们得到的是
java.lang.NullPointerException
,有没有更好的方法通过防止任何类型的异常来添加
Java8

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

如果要过滤掉它们,请在
减少之前添加
.filter(bigDecimal->bigDecimal!=null)
.filter(Objects::nonNull)
您可以在map之前使用filter操作符,您可以过滤products.stream().filter(x->x!=null).map(Product::getPrice).peek(bigDecimal->System.out.println(bigDecimal)).reduce(bigDecimal.ZERO,bigDecimal::add);或者您可以使用可选的wrapper.map(x->Optionale.of nullable(x.getPrice).orElse(0))注意,您还可以说
peek(System.out::println)