public List calculate(List records, String startTime, String endTime, String dayTimeRange, double dayNightRatio) { List result = new ArrayList<>();

// 将开始时间和结束时间转换为日期类型
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 著作权归作者所有。请勿转载和采集!

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