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 | { |