Java 集合处理:按日期和 ID 分组计算 rksl 和 cksl 总和
使用 Java 8 的 Stream 和 Lambda 表达式来实现,将集合按照日期分组,再按照 id 分组,并计算 rksl 和 cksl 的总和:
- 首先,将集合按照日期分组,可以使用
Collectors.groupingBy方法来实现:
Map<LocalDate, List<EntranceTrafficVO>> groupedByDate = entranceTrafficVOList.stream()
.filter(vo -> vo.getYear() != null && vo.getMonth() != null && vo.getDay() != null)
.collect(Collectors.groupingBy(vo -> LocalDate.of(vo.getYear(), vo.getMonth(), vo.getDay())));
- 然后,对于每一天的数据,再按照 id 分组,并计算 rksl 和 cksl 的总和:
Map<LocalDate, Map<String, int[]>> result = groupedByDate.entrySet().stream()
.collect(Collectors.toMap(Map.Entry::getKey, entry -> entry.getValue().stream()
.collect(Collectors.groupingBy(EntranceTrafficVO::getId,
Collectors.summarizingInt(vo -> vo.getRksl() + vo.getCksl())))
));
- 最后,遍历结果输出每一天各 id 的 rksl 和 cksl:
result.forEach((date, idTrafficMap) -> {
System.out.println('Date:' + date);
idTrafficMap.forEach((id, traffic) -> {
System.out.println(' ID:' + id + ', RKSL:' + traffic[0] + ', CKSL:' + traffic[1]);
});
});
原文地址: https://www.cveoy.top/t/topic/oZKc 著作权归作者所有。请勿转载和采集!