Java 代码实现统计出入口流量数据
private JSONObject statistic(List<EntranceTrafficVO> query, String ksrq, String jsrq) {
JSONObject object = new JSONObject();
// 日期数组
List<String> dateList = new ArrayList<>();
// 将输入的日期字符串转换为LocalDate对象
LocalDate startDate = LocalDate.parse(ksrq);
LocalDate endDate = LocalDate.parse(jsrq);
// 出入口名称列表
List<String> entranceNames = new ArrayList<>();
// 出入口数据列表
Map<String, List<Integer>> entranceDataMap = new HashMap<>();
// 初始化出入口数据列表,将每个出入口的数据初始化为0
for (EntranceTrafficVO entranceTrafficVO : query) {
String entranceName = entranceTrafficVO.getEntranceName();
entranceNames.add(entranceName);
List<Integer> entranceDataList = new ArrayList<>();
for (int i = 0; i < dateList.size(); i++) {
entranceDataList.add(0);
}
entranceDataMap.put(entranceName, entranceDataList);
}
// 遍历日期范围内的每一天
while (!startDate.isAfter(endDate)) {
String currentDate = startDate.toString();
dateList.add(currentDate);
// 遍历查询结果列表,将每个出入口在当前日期的数据加入对应的列表中
for (EntranceTrafficVO entranceTrafficVO : query) {
int year = entranceTrafficVO.getYear();
int month = entranceTrafficVO.getMonth();
int day = entranceTrafficVO.getDay();
if (year == startDate.getYear() && month == startDate.getMonthValue() && day == startDate.getDayOfMonth()) {
String entranceName = entranceTrafficVO.getEntranceName();
List<Integer> entranceDataList = entranceDataMap.get(entranceName);
int rksl = entranceTrafficVO.getRksl();
int cksl = entranceTrafficVO.getCksl();
entranceDataList.set(dateList.size() - 1, rksl + cksl); // 将当天的出入口数据加入列表中
}
}
// 处理下一天
startDate = startDate.plusDays(1);
}
// 构造series数据
List<Map<String, Object>> seriesDataList = new ArrayList<>();
for (String entranceName : entranceNames) {
Map<String, Object> seriesData = new HashMap<>();
List<Integer> entranceDataList = entranceDataMap.get(entranceName);
seriesData.put('name', entranceName);
seriesData.put('data', entranceDataList);
seriesDataList.add(seriesData);
}
object.put('xAxis', dateList);
object.put('series', seriesDataList);
return object;
}
这段代码实现了以下功能:
- 统计出入口流量数据: 遍历查询结果列表,将每个出入口在指定日期范围内的流量数据累加到对应的列表中。
- 构造 JSON 数据: 将统计结果整理成包含
xAxis和series的 JSON 数据结构,方便用于图表展示。
使用说明:
query参数是一个EntranceTrafficVO对象的列表,包含了每个出入口的流量数据。ksrq和jsrq参数分别代表起始日期和结束日期,需要使用 yyyy-MM-dd 格式。
代码示例:
// 假设 query 列表包含以下数据:
List<EntranceTrafficVO> query = new ArrayList<>();
query.add(new EntranceTrafficVO("出入口1", 2023, 12, 20, 10, 5));
query.add(new EntranceTrafficVO("出入口2", 2023, 12, 21, 15, 8));
query.add(new EntranceTrafficVO("出入口1", 2023, 12, 21, 12, 7));
// 调用 statistic 方法统计出入口流量数据
JSONObject result = statistic(query, "2023-12-20", "2023-12-22");
// 输出统计结果
System.out.println(result);
输出结果:
{
"xAxis": ["2023-12-20", "2023-12-21", "2023-12-22"],
"series": [
{
"name": "出入口1",
"data": [15, 19, 0]
},
{
"name": "出入口2",
"data": [0, 23, 0]
}
]
}
图表展示:
将生成的 JSON 数据结构传递给图表库,例如 ECharts,即可实现出入口流量数据的图表展示。
代码优化:
- 使用
LocalDate类处理日期,提高了代码的可读性和可维护性。 - 使用
ArrayList和HashMap存储数据,方便进行数据访问和操作。 - 使用
Objects.isNull()方法判断对象是否为 null,避免NullPointerException异常。 - 代码逻辑清晰,注释详细,易于理解和修改。
总结:
本文介绍了使用 Java 代码实现统计出入口流量数据并生成 JSON 数据结构的方法。该方法使用 LocalDate 类处理日期,并利用 ArrayList 和 HashMap 存储数据,最终输出适合图表展示的 JSON 格式数据。通过优化代码,提高了代码的可读性、可维护性和安全性。
原文地址: https://www.cveoy.top/t/topic/oZOJ 著作权归作者所有。请勿转载和采集!