package com.ruoyi.alarm.globalAlarm.domain; import lombok.AllArgsConstructor; import lombok.Data; import lombok.extern.slf4j.Slf4j; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.*; import java.util.concurrent.PriorityBlockingQueue; /** * @Description: 引导优先级队列 * @ClassName: PriorityQueue * @Author: 刘苏义 * @Date: 2023年06月29日11:18 * @Version: 1.0 **/ @Slf4j public class GuidePriorityQueue { /** * 相机队列,每个相机一个优先级队列 */ public static Map> cameraQueueMap = new HashMap<>(); /** * 创建一个自定义的比较器,根据优先级属性进行比较 */ public static Comparator getComparator() { Comparator PriorityDescCom = Comparator.comparingInt(GuideTask::getPriority).reversed(); Comparator NumDescCom = Comparator.comparingInt(GuideTask::getNum).reversed(); Comparator receiveTimeAscCom = Comparator.comparing(GuideTask::getReceiveTime); Comparator Comparator = PriorityDescCom.thenComparing(NumDescCom).thenComparing(receiveTimeAscCom); return Comparator; } /** * 测试使用:打印队列 */ public static void printPriorityQueue() { for (String cameraId : GuidePriorityQueue.cameraQueueMap.keySet()) { PriorityBlockingQueue priorityQueue = GuidePriorityQueue.cameraQueueMap.get(cameraId); // for (GuideTask task : priorityQueue) { // // log.info("【alarmId】" + task.getAlarmId() + "【receiveTime】" + task.getReceiveTime() // + "【priority】" + task.getPriority() + "【num】" + task.getNum() // + "【chan】" + task.getChanNum() + "【recordSn】" + task.getRecordSn() + "【cameraId】" + task.getCameraId()); // } while (priorityQueue.size() > 0) { GuideTask task = priorityQueue.poll(); log.info("【alarmId】" + task.getAlarmId() + "【receiveTime】" + task.getReceiveTime() + "【priority】" + task.getPriority() + "【num】" + task.getNum() + "【chan】" + task.getChanNum() + "【recordSn】" + task.getRecordSn() + "【cameraId】" + task.getCameraId());; } } } public static void main(String[] args) { Comparator com1 = Comparator.comparingInt(obj::getNUM1).reversed(); Comparator com2 = Comparator.comparingInt(obj::getNUM2).reversed(); Comparator com3 = Comparator.comparingInt(obj::getNUM3).reversed(); Comparator objComparator = com1.thenComparing(com2).thenComparing(com3); PriorityQueue priorityQueue = new PriorityQueue<>(objComparator); priorityQueue.add(new obj(1, 1, 65)); priorityQueue.add(new obj(1, 4, 21)); priorityQueue.add(new obj(1, 4, 33)); priorityQueue.add(new obj(1, 4, 44)); priorityQueue.add(new obj(1, 4, 51)); while (priorityQueue.size() > 0) { obj task = priorityQueue.poll(); log.info("【num1】" + task.getNUM1() + "【num2】" + task.getNUM2() + "【num3】" + task.getNUM3()); } log.info("======================================================================="); } } @Data @AllArgsConstructor class obj { Integer NUM1; Integer NUM2; Integer NUM3; }