Java代码实现昼伏夜出车辆筛选算法
Java代码实现昼伏夜出车辆筛选算法
该代码实现了一个算法,用于从过车记录集合中筛选出符合条件的昼伏夜出车辆。
算法逻辑:
- 将过车记录集合按照日期和车辆信息(号牌种类和号牌号码)进行分组,并记录每个分组的车辆是否在白天有过车记录。
- 统计每个分组的夜晚过车次数和总过车次数,计算夜晚过车比例。
- 如果夜晚过车比例大于设定的昼伏夜出比例,则将该分组中所有的车辆数据添加到新的集合中。
代码示例:
public List<AnalysisJudgmentVehicleVO> getNightOutVehicles(List<AnalysisJudgmentVehicleVO> records, String startTime, String endTime, double ratio) {
List<AnalysisJudgmentVehicleVO> result = new ArrayList<>();
SimpleDateFormat sdf = new SimpleDateFormat('yyyy-MM-dd HH:mm:ss');
Date start = null, end = null;
try {
start = sdf.parse(startTime + ' 00:00:00');
end = sdf.parse(endTime + ' 23:59:59');
} catch (ParseException e) {
e.printStackTrace();
}
long diff = (end.getTime() - start.getTime()) / (1000 * 60 * 60 * 24) + 1;
Map<String, Map<String, Boolean>> vehicleMap = new HashMap<>();
for (AnalysisJudgmentVehicleVO record : records) {
Date time = null;
try {
time = sdf.parse(record.getGcsj());
} catch (ParseException e) {
e.printStackTrace();
}
if (time != null && time.getTime() >= start.getTime() && time.getTime() <= end.getTime()) {
String date = sdf.format(time).substring(0, 10);
String key = record.getHpzl() + record.getHphm();
if (!vehicleMap.containsKey(date)) {
vehicleMap.put(date, new HashMap<>());
}
if (!vehicleMap.get(date).containsKey(key)) {
vehicleMap.get(date).put(key, false);
}
if (time.getHours() >= 6 && time.getHours() < 18) {
vehicleMap.get(date).put(key, true);
}
}
}
for (String date : vehicleMap.keySet()) {
int nightCount = 0, totalCount = 0;
for (boolean daytime : vehicleMap.get(date).values()) {
if (!daytime) {
nightCount++;
}
totalCount++;
}
double nightRatio = (double) nightCount / totalCount;
if (nightRatio > ratio) {
for (AnalysisJudgmentVehicleVO record : records) {
String recordDate = record.getGcsj().substring(0, 10);
String recordKey = record.getHpzl() + record.getHphm();
if (recordDate.equals(date) && vehicleMap.get(date).get(recordKey) != null && !vehicleMap.get(date).get(recordKey)) {
result.add(record);
break;
}
}
}
}
return result;
}
使用示例:
List<AnalysisJudgmentVehicleVO> records = new ArrayList<>();
// 添加过车记录数据
String startTime = '2023-04-01';
String endTime = '2023-04-10';
double ratio = 0.3;
List<AnalysisJudgmentVehicleVO> result = getNightOutVehicles(records, startTime, endTime, ratio);
算法说明:
AnalysisJudgmentVehicleVO类包含车辆信息,例如号牌种类 (hpzl)、号牌号码 (hphm) 和过车时间 (gcsj)。getNightOutVehicles()方法接收过车记录集合、开始时间、结束时间和昼伏夜出比例作为参数,返回筛选后的昼伏夜出车辆集合。- 代码中使用
SimpleDateFormat类格式化时间字符串,并使用Date类表示日期和时间。 vehicleMap存储分组信息,key 为日期,value 为一个 HashMap,存储车辆信息和白天是否过车记录。- 算法统计每个分组的夜晚过车次数和总过车次数,计算夜晚过车比例,并根据比例筛选出符合条件的车辆。
注意:
- 该算法假设过车记录按照时间顺序排列。
- 可以根据实际需求修改代码,例如添加其他筛选条件。
原文地址: https://www.cveoy.top/t/topic/nVVT 著作权归作者所有。请勿转载和采集!