public List calculate(List records, String startTime, String endTime, String dayStartTime, String dayEndTime, double dayNightRatio) { List result = new ArrayList<>(); Map<String, Set> nightCars = new HashMap<>(); // 保存晚上有过车记录的车辆信息,key为日期,value为车辆号牌 Map<String, Set> dayCars = new HashMap<>(); // 保存白天有过车记录的车辆信息,key为日期,value为车辆号牌 Map<String, Set> allCars = new HashMap<>(); // 保存每天所有有过车记录的车辆信息,key为日期,value为车辆号牌 Map<String, Integer> nightCount = new HashMap<>(); // 保存晚上有过车记录但白天没有的车辆数,key为日期,value为数值 Map<String, Integer> totalCount = new HashMap<>(); // 保存每天所有有过车记录的车辆数,key为日期,value为数值 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { Date start = sdf.parse(startTime + " " + dayStartTime + ":00:00"); Date end = sdf.parse(endTime + " " + dayEndTime + ":00:00"); long dayDiff = (end.getTime() - start.getTime()) / (24 * 60 * 60 * 1000) + 1; // 统计天数 for (int i = 0; i < records.size(); i++) { AnalysisJudgmentVehicleVO record = records.get(i); Date date = sdf.parse(record.getGcsj()); String day = sdf.format(date).substring(0, 10); if (date.getTime() >= start.getTime() && date.getTime() <= end.getTime()) { String key = record.getHpzl() + record.getHphm() + day; if (!allCars.containsKey(day)) { allCars.put(day, new HashSet<>()); } allCars.get(day).add(key); if (date.getHours() >= 6 && date.getHours() < 18) { // 白天 if (!dayCars.containsKey(day)) { dayCars.put(day, new HashSet<>()); } dayCars.get(day).add(key); } else { // 晚上 if (!nightCars.containsKey(day)) { nightCars.put(day, new HashSet<>()); } nightCars.get(day).add(key); } } } for (String day : allCars.keySet()) { Set cars = allCars.get(day); int dayCount = 0; int nightCarCount = 0; int nightCountForDay = 0; for (String car : cars) { if (dayCars.containsKey(day) && dayCars.get(day).contains(car)) { dayCount++; } if (nightCars.containsKey(day) && nightCars.get(day).contains(car)) { nightCarCount++; } } if (nightCars.containsKey(day)) { nightCountForDay = nightCars.get(day).size() - nightCarCount; } nightCount.put(day, nightCountForDay); totalCount.put(day, cars.size()); double ratio = (double) nightCountForDay / (totalCount.get(day) * dayDiff); if (ratio > dayNightRatio) { for (String car : nightCars.get(day)) { if (!dayCars.containsKey(day) || !dayCars.get(day).contains(car)) { AnalysisJudgmentVehicleVO record = records.get(0); record.setGcsj(day + " " + record.getGcsj().substring(11)); result.add(record); break; } } } } } catch (ParseException e) { e.printStackTrace(); } return result; }

根据过车记录计算昼伏夜出车辆,并筛选比例大于设定值的车辆

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

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