2016-04-30 422 views
0

我有一个List<BigInteger> listBigInt。有些项目是null有些不是。
我希望所有项目(除了null值)乘以5并且使用java8流进行求和。
到目前为止,我fugured了这个结构:在java8流中处理null BigDecimals

BigDecimal sum = listBigInt.stream() 
    .map(c -> (c == null ? BigDecimal.ZERO : c).multiply(new BigDecimal(5))) 
    .reduce(BigDecimal::add).get(); 

是否有更优雅的方式,以避免空值?

回答

1

您可以通过最后乘以获得一些更多的速度:

BigDecimal sum = listBigInt.stream() 
    .filter(c -> c != null) 
    .reduce(BigDecimal::add) 
    .get() 
    .multiply(new BigDecimal(5)); 
1

其实一个可行的办法是使用过滤器映射在这之前:

BigDecimal sum = listBigInt.stream() 
    .filter(c -> c != null) 
    .map(c -> c.multiply(new BigDecimal(5))) 
    .reduce(BigDecimal::add).get();