防止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)
。