list 先多字段分组
时间: 2025-05-05 21:15:47 浏览: 29
### Java8 Stream API 多字段分组
在Java8中,`Stream` API 提供了一种简洁而强大的方式来处理集合数据。对于多字段分组的需求,可以借助 `Collectors.groupingBy()` 方法配合自定义键生成器实现复杂的数据聚合操作[^1]。
具体来说,在面对需要基于多个属性进行分组并计算特定数值总和的情况时,可以通过传递给 `groupingBy` 的分类函数返回一个包含所需分组依据的对象实例。此对象通常是一个简单的POJO(Plain Old Java Object),用于封装作为分组标准的各个字段值组合[^2]。
下面展示了一个具体的例子,该示例展示了如何按照站点ID、名称以及经纬度信息对气象站记录进行分组,并统计各组内的分钟降雨量之和:
```java
stations.parallelStream()
.collect(Collectors.groupingBy(
(station) -> new AtstationDTO(station.getStationIdC(), station.getStationName(), station.getLon(), station.getLat()),
Collectors.summarizingDouble(AtstationDTO::getMinuteRainfall)))
.forEach((key, value) -> {
key.setTimestamp(endTime);
key.setMinuteRainfall((float)value.getSum());
rainfalls.add(key);
});
```
上述代码片段首先创建了一个并行流以提高处理效率;接着通过调用 `collect` 方法指定收集策略——先按定制逻辑构建复合键再汇总对应的双精度浮点型数值得到平均值、计数等统计数据;最后遍历所得映射结构完成进一步的结果组装工作。
值得注意的是,这里使用的 `AtstationDTO` 类应当适当地重写其 `equals()` 和 `hashCode()` 方法,确保能够正确识别具有相同属性集的不同实体为同一项,从而保证分组行为的一致性和准确性。
阅读全文
相关推荐


















