Java 代码实现过车记录筛选,识别昼伏夜出车辆
Java 代码实现过车记录筛选,识别昼伏夜出车辆
本文提供 Java 代码实现,根据过车记录集合,筛选出满足特定条件的昼伏夜出车辆。代码基于时间段判断和比例计算,并考虑了同一天同一辆车只计算一次的逻辑。
代码实现
public List<AnalysisJudgmentVehicleVO> filterNightOutVehicles(List<AnalysisJudgmentVehicleVO> records, String startTime, String endTime, double dayNightRatio) {
List<AnalysisJudgmentVehicleVO> result = new ArrayList<>();
Map<String, Set<String>> visitedVehicles = new HashMap<>();
LocalDate startDate = LocalDate.parse(startTime);
LocalDate endDate = LocalDate.parse(endTime);
LocalTime dayStart = LocalTime.parse('06:00');
LocalTime dayEnd = LocalTime.parse('18:00');
for (AnalysisJudgmentVehicleVO record : records) {
String plateKey = record.getHpzl() + record.getHphm();
String timeStr = record.getGcsj();
LocalDate date = LocalDate.parse(timeStr.substring(0, 10));
LocalTime time = LocalTime.parse(timeStr.substring(11));
Set<String> visitedTimes = visitedVehicles.getOrDefault(plateKey, new HashSet<>());
if (date.isBefore(startDate) || date.isAfter(endDate)) {
continue;
}
if (time.isAfter(dayStart) && time.isBefore(dayEnd)) {
visitedTimes.add('day');
} else {
visitedTimes.add('night');
}
visitedVehicles.put(plateKey, visitedTimes);
}
for (AnalysisJudgmentVehicleVO record : records) {
String plateKey = record.getHpzl() + record.getHphm();
Set<String> visitedTimes = visitedVehicles.getOrDefault(plateKey, new HashSet<>());
if (visitedTimes.contains('night') && !visitedTimes.contains('day')) {
LocalDate date = LocalDate.parse(record.getGcsj().substring(0, 10));
int daysDiff = (int) ChronoUnit.DAYS.between(startDate, date);
double dayNightRatioForVehicle = (double) visitedTimes.size() / (double) (daysDiff + 1);
if (dayNightRatioForVehicle > dayNightRatio) {
result.add(record);
}
}
}
return result;
}
代码说明
- 输入参数:
records: 过车记录集合,每个记录包含车辆的号牌种类 (hpzl)、号牌号码 (hphm) 和过车时间 (gcsj) 信息。startTime: 统计条件的开始时间,格式为 'yyyy-MM-dd'。endTime: 统计条件的结束时间,格式为 'yyyy-MM-dd'。dayNightRatio: 昼伏夜出比例,例如 0.3 代表 30%。
- 代码逻辑:
- 使用
HashMap存储已经遍历过的车辆及其在每天白天或晚上的过车记录,键为车辆的号牌种类和号牌号码组合,值为一个Set,包含字符串 'day' 或 'night',分别表示白天和晚上有过车记录。 - 遍历过车记录集合,提取出车辆的号牌种类和号牌号码组合,以及过车时间的日期和时间。
- 根据时间段判断该记录是白天还是晚上过车,将 'day' 或 'night' 加入对应车辆的
Set中。 - 再次遍历过车记录集合,对于每个记录,判断该车辆是否在同一天的晚上有过车记录但白天没有。
- 如果满足条件,计算该车辆的昼伏夜出比例,并与输入的
dayNightRatio进行比较。 - 如果车辆的昼伏夜出比例大于输入的比例,将该记录加入结果集合中。
- 使用
- 返回值:
- 返回包含满足昼伏夜出条件的过车记录的新集合。
注意
- 代码使用了 Java 8 中的日期时间 API,如
LocalDate和LocalTime,以及ChronoUnit类,需要确保使用的 Java 版本在 1.8 或以上。 - 该代码仅提供了一个基本的实现思路,实际应用中可能需要根据具体需求进行修改和完善。
原文地址: https://www.cveoy.top/t/topic/nVWb 著作权归作者所有。请勿转载和采集!