【发布时间】:2021-03-02 14:48:08
【问题描述】:
我正在尝试将给定产品的所有价格添加为:
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?
【问题讨论】:
-
如果你想过滤掉它们,在
reduce之前添加.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);或者你可以使用可选包装器 .map(x-> Optionale.ofNullable(x.getPrice).orElse(0))
-
注意你可以说
peek(System.out::println)。
标签: java collections java-8 java-stream