Java 集合数据处理:获取指定日期范围内每个出入口的流量统计
Java 集合数据处理:获取指定日期范围内每个出入口的流量统计
假设你有一个包含 EntranceTrafficVO 对象的集合,每个 EntranceTrafficVO 对象表示一个出入口在特定日期的流量数据,包含以下属性:
id:出入口 IDentranceName:出入口名称rksl:某个指标的流量值cksl:另一个指标的流量值year、month、day:日期信息
现在你想要获取某个日期范围 kssj 到 jssj 内,每天每个出入口的 rksl 和 cksl 值。即使在原始数据中,某个日期或出入口的流量信息缺失,也需要将所有日期和出入口的信息完整展示出来,缺失的流量值默认设置为 0。
实现步骤
为了实现这个功能,可以使用 Map 数据结构来存储处理结果。具体步骤如下:
-
创建
Map存储结果: 创建一个Map,其中key为日期,value为另一个Map,存储每个出入口的rksl和cksl值。 -
遍历集合,存储每天每个出入口的流量数据: 遍历原始集合,对于每个
EntranceTrafficVO对象:- 根据
year、month、day属性构造一个LocalDate对象,作为外层Map的key。 - 获取内层
Map,如果内层Map不存在该出入口的记录,则新增一个记录并将rksl和cksl初始化为 0。 - 将该对象的
rksl和cksl值累加到内层Map中对应出入口的记录中。
- 根据
-
遍历日期范围,获取每天的结果: 遍历日期范围
kssj到jssj,对于每个日期:- 如果对应日期在外层
Map中不存在,则新增一个记录,内层Map中所有出入口的rksl和cksl都初始化为 0。 - 遍历内层
Map,输出每个出入口的rksl和cksl值。
- 如果对应日期在外层
代码示例
// 构造日期范围
LocalDate kssj = LocalDate.of(2023, 5, 1);
LocalDate jssj = LocalDate.of(2023, 6, 30);
// 创建Map存储结果
Map<LocalDate, Map<String, EntranceTrafficVO>> resultMap = new HashMap<>();
// 遍历集合,存储每个出入口每天的rksl和cksl
for (EntranceTrafficVO vo : list) {
LocalDate date = LocalDate.of(vo.getYear(), vo.getMonth(), vo.getDay());
Map<String, EntranceTrafficVO> innerMap = resultMap.getOrDefault(date, new HashMap<>());
EntranceTrafficVO innerVO = innerMap.getOrDefault(vo.getId(), new EntranceTrafficVO(vo.getId(), vo.getEntranceName(), 0, 0, vo.getYear(), vo.getMonth(), vo.getDay()));
innerVO.setRksl(innerVO.getRksl() + vo.getRksl());
innerVO.setCksl(innerVO.getCksl() + vo.getCksl());
innerMap.put(vo.getId(), innerVO);
resultMap.put(date, innerMap);
}
// 遍历日期范围,获取每天的结果
for (LocalDate date = kssj; date.isBefore(jssj.plusDays(1)); date = date.plusDays(1)) {
Map<String, EntranceTrafficVO> innerMap = resultMap.getOrDefault(date, new HashMap<>());
for (EntranceTrafficVO vo : innerMap.values()) {
System.out.println(date + ' ' + vo.getEntranceName() + ' ' + vo.getRksl() + ' ' + vo.getCksl());
}
}
总结
本文展示了如何使用 Java 代码,从一个包含出入口流量数据的集合中,提取指定日期范围内的每天各个出入口的流量统计信息。这种方法可以方便地处理数据缺失的情况,保证所有日期和出入口的流量信息完整呈现。
原文地址: https://www.cveoy.top/t/topic/oZKF 著作权归作者所有。请勿转载和采集!