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<String, PriorityBlockingQueue<GuideTask>> cameraQueueMap = new HashMap<>();
|
|
/**
|
* 创建一个自定义的比较器,根据优先级属性进行比较
|
*/
|
public static Comparator<GuideTask> getComparator() {
|
Comparator<GuideTask> PriorityDescCom = Comparator.comparingInt(GuideTask::getPriority).reversed();
|
Comparator<GuideTask> NumDescCom = Comparator.comparingInt(GuideTask::getNum).reversed();
|
Comparator<GuideTask> receiveTimeAscCom = Comparator.comparing(GuideTask::getReceiveTime);
|
Comparator<GuideTask> Comparator = PriorityDescCom.thenComparing(NumDescCom).thenComparing(receiveTimeAscCom);
|
return Comparator;
|
}
|
|
/**
|
* 测试使用:打印队列
|
*/
|
public static void printPriorityQueue() {
|
for (String cameraId : GuidePriorityQueue.cameraQueueMap.keySet()) {
|
PriorityBlockingQueue<GuideTask> priorityQueue = GuidePriorityQueue.cameraQueueMap.get(cameraId);
|
PriorityQueue<GuideTask> queue= new PriorityQueue<>(priorityQueue);
|
while (queue.size() > 0) {
|
GuideTask task = queue.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<obj> com1 = Comparator.comparingInt(obj::getNUM1).reversed();
|
Comparator<obj> com2 = Comparator.comparingInt(obj::getNUM2).reversed();
|
Comparator<obj> com3 = Comparator.comparingInt(obj::getNUM3).reversed();
|
Comparator<obj> objComparator = com1.thenComparing(com2).thenComparing(com3);
|
PriorityQueue<obj> 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));
|
PriorityQueue<obj> queue= new PriorityQueue<>(priorityQueue);
|
while (queue.size() > 0) {
|
obj task = queue.poll();
|
log.info("【num1】" + task.getNUM1() + "【num2】" + task.getNUM2() + "【num3】" + task.getNUM3());
|
}
|
log.info("=======================================================================");
|
}
|
}
|
|
@Data
|
@AllArgsConstructor
|
class obj {
|
Integer NUM1;
|
Integer NUM2;
|
Integer NUM3;
|
}
|