reducing简介
reducing 是一个收集器(操作),从字面意义上可以理解为“减少操作”:输入多个元素,在一定的操作后,元素减少。
reducing 有多个重载方法,其中一个方法如下:
public static <T> Collector<T,?,Optional<T>> reducing(BinaryOperator<T> op)
以上方法,JDK对其的描述是:
Returns a Collector which performs a reduction of its input elements
under a specified BinaryOperator. The result is described as an
Optional. (返回一个收集器,该收集器在指定的二进制操作符下执行其输入元素的减少。结果被描述为可选的 。)
List<Map<String, Object>> result = new ArrayList<>();
//1
Map<String, BigDecimal> collect= result.stream().collect(Collectors.groupingBy(x->x.get("dev").toString(),
Collectors.reducing(BigDecimal.ZERO,
t->(BigDecimal)t.get("price"), (v1, v2) -> v1.add(v2))));
//2
Map<String, BigDecimal> collect2= result.stream().collect(Collectors.groupingBy(x->x.get("dev").toString(),
Collectors.reducing(BigDecimal.ZERO,
t->(BigDecimal)t.get("price"), BigDecimal::add)));
其他参考
//4
Map<String, Double> collect4= result.stream().collect(Collectors.groupingBy(x->x.get("dev").toString(),
Collectors.summingDouble(x-> (double) x.get("price"))));
//5
Map<String, DoubleSummaryStatistics> collect5= result.stream().collect(Collectors.groupingBy(x->x.get("dev").toString(),
Collectors.summarizingDouble(x-> (double) x.get("price"))));
System.out.println("price:"+collect5.get("collect4"));
//DoubleSummaryStatistics
//getSum()——获取和
//getMax()——获取最大值
//getMin()——获取最小值
//getAverage()——获取平均值
//getCount()——获取数据量
System.out.println("price:"+collect5.get("collect4").getSum());