Java 8 在java8流中处理空的大小数

Java 8 在java8流中处理空的大小数,java-8,java-stream,biginteger,Java 8,Java Stream,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(); 有没有更优雅的方法来避

我有一个
列表listBigInt
。有些项目为
null
有些项目不为空。
我希望所有项目(除了
null
值)乘以5,然后使用java8流求和。
到目前为止,我想出了这个结构:

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

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

实际上,一种可能的方法是在映射之前使用筛选器,如下所示:

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

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

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

通过乘以最后一个,您可以获得更快的速度:

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

通过乘以最后一个,您可以获得更快的速度:

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