将 List<BigDecimal> 求和
代码语言:javascript复制public static void main(String[] args) {
List<BigDecimal> list = new ArrayList<>();
// 假数据
list.add(BigDecimal.valueOf(1.1));
list.add(BigDecimal.valueOf(1.2));
list.add(BigDecimal.valueOf(1.3));
list.add(BigDecimal.valueOf(1.4));
// 流式操作
BigDecimal decimal = list.stream().reduce(BigDecimal.ZERO, BigDecimal::add);
// 打印结果
System.out.println(decimal);
}
list.stream().reduce() 1、stream 中的 reduce 的主要作用就是将[stream]中元素进行组合,组合的方式可以是加减乘除,也可以是拼接等。 2、BigDecimal.ZERO就像new BigDecimal(0),它是一个预定义的常量。 3、reduce 一共有三种实现:
- T reduce(T identity, BinaryOperator accumulator); 该实现有起始值 identity, 起始值的类型决定了返回结果的类型,通过 accumulator 操作最终得到 identity 类型的返回结果
- Optional<T>reduce(BinaryOperator accumulator); 该实现只有一个参数 accumulator , 由于没有办法确定具体的返回结果,所以该方法返回的是 Optional
- <U> U reduce(U identity, BiFunction accumulator, BinaryOperator combiner); 该方法有三个参数 identity 、 accumulator 、combiner ,该方法通过 identity 和 accumulator的处理得出最终结果,结果和第一个参数的类型相同
而我们使用的方便是第一种reduce的实现,需要传入一个BinaryOperator接口,继承了BiFunction接口 简单说 就是需要传入2个同类型参数,返回同类型的参数