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;
}

代码说明

  1. 输入参数:
    • records: 过车记录集合,每个记录包含车辆的号牌种类 (hpzl)、号牌号码 (hphm) 和过车时间 (gcsj) 信息。
    • startTime: 统计条件的开始时间,格式为 'yyyy-MM-dd'。
    • endTime: 统计条件的结束时间,格式为 'yyyy-MM-dd'。
    • dayNightRatio: 昼伏夜出比例,例如 0.3 代表 30%。
  2. 代码逻辑:
    • 使用 HashMap 存储已经遍历过的车辆及其在每天白天或晚上的过车记录,键为车辆的号牌种类和号牌号码组合,值为一个 Set,包含字符串 'day' 或 'night',分别表示白天和晚上有过车记录。
    • 遍历过车记录集合,提取出车辆的号牌种类和号牌号码组合,以及过车时间的日期和时间。
    • 根据时间段判断该记录是白天还是晚上过车,将 'day' 或 'night' 加入对应车辆的 Set 中。
    • 再次遍历过车记录集合,对于每个记录,判断该车辆是否在同一天的晚上有过车记录但白天没有。
    • 如果满足条件,计算该车辆的昼伏夜出比例,并与输入的 dayNightRatio 进行比较。
    • 如果车辆的昼伏夜出比例大于输入的比例,将该记录加入结果集合中。
  3. 返回值:
    • 返回包含满足昼伏夜出条件的过车记录的新集合。

注意

  • 代码使用了 Java 8 中的日期时间 API,如 LocalDateLocalTime,以及 ChronoUnit 类,需要确保使用的 Java 版本在 1.8 或以上。
  • 该代码仅提供了一个基本的实现思路,实际应用中可能需要根据具体需求进行修改和完善。
Java 代码实现过车记录筛选,识别昼伏夜出车辆

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

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