Java代码实现昼伏夜出车辆筛选算法

该代码实现了一个算法,用于从过车记录集合中筛选出符合条件的昼伏夜出车辆。

算法逻辑:

  1. 将过车记录集合按照日期和车辆信息(号牌种类和号牌号码)进行分组,并记录每个分组的车辆是否在白天有过车记录。
  2. 统计每个分组的夜晚过车次数和总过车次数,计算夜晚过车比例。
  3. 如果夜晚过车比例大于设定的昼伏夜出比例,则将该分组中所有的车辆数据添加到新的集合中。

代码示例:

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,存储车辆信息和白天是否过车记录。
  • 算法统计每个分组的夜晚过车次数和总过车次数,计算夜晚过车比例,并根据比例筛选出符合条件的车辆。

注意:

  • 该算法假设过车记录按照时间顺序排列。
  • 可以根据实际需求修改代码,例如添加其他筛选条件。
Java代码实现昼伏夜出车辆筛选算法

原文地址: https://www.cveoy.top/t/topic/nVVT 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录