在java8流中处理null BigDecimals

时间:2016-04-30 14:26:27

标签: java-8 java-stream biginteger

我有List<BigInteger> listBigInt。有些项目是null,有些则不是 我希望所有项目(null值除外)乘以5并使用java8流求和 到目前为止,我已经解开了这个结构:

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

是否有更优雅的方法来避免空值?

2 个答案:

答案 0 :(得分:1)

实际上,一种可能的方法是在映射之前使用过滤器:

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

答案 1 :(得分:1)

你可以通过乘以最后一个来获得更多的速度:

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