Java 的 Stream 有一个非常重要且有用的操作符 groupingBy
,可以对数据进行分组统计。
我们可以根据业务需要,对分组的键以及分组规则进行自定义,以实现更复杂的分组统计计算。
简单分组统计
一个非常简单的例子,假设我们有一个名字的列表,我们想统计一下每个名字有多少人重名:
1 | List<String> names = Arrays.asList( |
groupingBy()
操作符接收两个参数,第一个是指定分组的 key
,第二个参数是实现聚合计算的下游流。
稍复杂的结构
如果我们的数据结构稍微复杂点,比如是一个类:
1 | List<ProductSold> datas = new ArrayList<>(); |
自定义聚合规则
还是上面的数据,如果我们要按 category
进行分组,统计每个种类商品的销量,销售额,占比等,则需要重写聚合规则,即第二个参数:
1 | // 按category进行分组统计,销量,销售额,占比等 |
结果:
1 | { |
自定义分组的 key
还是上面的数据,假如我们不按商品种类分,而是按商品售价,统计一下售价区间:
1 | // 按价格区间分组,自定义分组key |
结果如下:
1 | { |