java8 stream统计、汇总、多字段分组、多个列汇总统计 您所在的位置:网站首页 java统计数字数量 java8 stream统计、汇总、多字段分组、多个列汇总统计

java8 stream统计、汇总、多字段分组、多个列汇总统计

2024-07-07 01:50| 来源: 网络整理| 查看: 265

文章目录 前言一、GroupingBy收集器二、使用示例2.1 准备2.2 根据单一字段分组2.3 根据Map的key的类型分组2.4 修改返回Map的value的类型2.5 修改返回自定义类型2.6 根据多个字段分组2.7 得到分组结果的平均值2.8 得到分组结果的总计2.9 得到分组结果中的最大或最小值2.10 得到分组结果中某个属性的统计2.11 把分组结果映射为另外的类型2.12 修改返回Map的类型2.13 collectingAndThen包裹一个收集器,对其结果应用转换函数 3 并发的分组Collector 总结

前言

本文将展示groupingBy收集器的多个示例,阅读本文需要先准备Java Stream和Java收集器Collector的知识。

一、GroupingBy收集器

Java8的Stream API允许我们以声明的方式来处理数据集合。

静态工厂方法:Collectors.groupingBy(),以及Collectors.groupingByConcunrrent(),给我们提供了类似SQL语句中的"GROUP BY"的功能。这两个方法将数据按某些属性分组,并存储在Map中返回。

作为collect方法的参数,Collector是一个接口,它是一个可变的汇聚操作,将输入元素累计到一个可变的结果容器中;它会在所有元素都处理完毕后,将累积的结果转换为一个最终的表示(这是一个可选操作);

Collectors本身提供了关于Collector的常见汇聚实现,Collectors的内部类CollectorImpl实现了Collector接口,Collectors本身实际上是一个工厂。 Collector 类方法:

public interface Collector { Supplier supplier(); BiConsumer accumulator(); BinaryOperator combiner(); Function finisher(); Set characteristics(); }

Collector主要定义了容器的类型,添加元素的方法,容器合并的方法还有输出的结果。

supplier就是生成容器accumulator是添加元素combiner是合并容器finisher是输出的结果characteristics是定义容器的三个属性(三个枚举值),包括是否有明确的finisher,是否需要同步,是否有序。 CONCURRENT(集合的操作需要同步):表示中间结果只有一个,即使在并行流的情况下。所以只有在并行流且收集器不具备CONCURRENT特性时,combiner方法返回的lambda表达式才会执行(中间结果容器只有一个就无需合并)UNORDER(集合是无序的):表示流中的元素无序。IDENTITY_FINISH(不用finisher):表示中间结果容器类型与最终结果类型一致,此时finiser方法不会被调用 其中这里的泛型所表示的含义是:

T:表示流中每个元素的类型。 A:表示中间结果容器的类型。 R:表示最终返回的结果类型。

下面是几个重载的groupnigBy方法:

参数 :分类函数 static Collector groupingBy(Function


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有