根据过车记录统计昼伏夜出车辆,并返回符合条件的车辆信息
public List
// 将开始时间和结束时间转换为日期类型
LocalDate startDate = LocalDate.parse(startTime);
LocalDate endDate = LocalDate.parse(endTime);
// 将白天时间范围转换为开始和结束小时
int startHour = Integer.parseInt(dayTimeRange.split("-")[0]);
int endHour = Integer.parseInt(dayTimeRange.split("-")[1]);
// 遍历每一天
for (LocalDate date = startDate; !date.isAfter(endDate); date = date.plusDays(1)) {
// 记录当天已经出现过的车辆
Set<String> vehicles = new HashSet<>();
// 遍历当天的过车记录
for (AnalysisJudgmentVehicleVO record : records) {
LocalDate recordDate = LocalDate.parse(record.getGcsj().substring(0, 10));
int hour = Integer.parseInt(record.getGcsj().substring(11, 13));
// 判断是否在统计时间范围内
if (!date.isEqual(recordDate)) {
continue;
}
// 判断是否为晚上出行
if (hour < startHour || hour >= endHour) {
// 如果同一天同一辆车晚上有过车记录白天没有,则次数+1
String vehicleKey = record.getHpzl() + record.getHphm();
if (!vehicles.contains(vehicleKey)) {
record.setCount(record.getCount() + 1);
vehicles.add(vehicleKey);
}
}
}
// 计算当天的昼伏夜出比例
double ratio = (double) vehicles.size() / (double) (endDate.toEpochDay() - startDate.toEpochDay() + 1);
if (ratio > dayNightRatio) {
result.addAll(vehicles.stream().map(key -> {
AnalysisJudgmentVehicleVO vo = new AnalysisJudgmentVehicleVO();
vo.setHpzl(key.substring(0, 2));
vo.setHphm(key.substring(2));
return vo;
}).collect(Collectors.toList()));
}
}
return result;
}
原文地址: https://www.cveoy.top/t/topic/nVYn 著作权归作者所有。请勿转载和采集!