Java 优先级队列按两个值排序
我有一个优先级队列,其中包含如下所示的患者:Java 优先级队列按两个值排序,java,Java,我有一个优先级队列,其中包含如下所示的患者: patientQueue.add(new Patient(idNr, name, emergencyNr)); 现在我想先按emergencyNr,然后按idNr对队列进行排序。“名字”不重要 现在,我可以对优先级队列进行排序,并在患者中实施比较: @Override public int compareTo(Patient otherRequest) { return Integer.compare(isEmerg
patientQueue.add(new Patient(idNr, name, emergencyNr));
现在我想先按emergencyNr,然后按idNr对队列进行排序。“名字”不重要
现在,我可以对优先级队列进行排序,并在患者中实施比较:
@Override
public int compareTo(Patient otherRequest) {
return Integer.compare(isEmergencyCase(), otherRequest.isEmergencyCase());
}
如何实现也按IdNr排序的方法?
因此,如果所有EmergencyNr都相等,那么最低的idNr将是第一个
提前谢谢各位 看一看
这里使用了构造函数
你的直升机应该包含这样的东西
if (this.emergency != other.emergency)
return other.emergency - this.emergency
else
return other.id - this.id
只需在
compareTo()
中添加另一个条件:
或者使用接受比较器的构造函数,如:
Queue<Patient> q
= new PriorityQueue<>(CAPACITY, Comparator.comparing(Patient::getEmegencyNr)
.thenComparing(Patient::getIdNr));
谢谢,我以前也试过,但是当你排着长队的时候就不行了。当我问“patientQueue”时,会有一些小错误:Patient:[ID=2,Name=1,emergencyNr=1],Patient:[ID=16,Name=10,emergencyNr=10],Patient:[ID=4,Name=1,emergencyNr=1],Patient:[ID=7,Name=1,emergencyNr=1],Patient:[ID=8,Name=1,emergencyNr=1],Patient:[ID=17,Name=10,emergencyNr=10],Patient:[ID=10,Name=1,emergencyNr=1],患者:[ID=11,Name=1,emergencyNr=1],患者:[ID=12,Name=0,emergencyNr=0],患者:[ID=13,Name=0,emergencyNr=0],患者:[ID=6,Name=0,emergencyNr=0],患者:[ID=9,Name=1,emergencyNr=1],患者:[ID=1,Name=1,emergencyNr=1]`如果我只有3或4名患者,它就可以工作……也许只是运气好?@Johan
PriorityQueue
iterator不会按优先级顺序返回元素:,这就是为什么打印时会收到随机结果。好的,谢谢,但我不想在打印时清空队列。我仍然需要具有相同内容的队列,以便在打印后可以添加新患者我已经打印了队列。我唯一想清空队列的时间是当所有患者都完成时。@sashalauyou
Queue<Patient> q
= new PriorityQueue<>(CAPACITY, Comparator.comparing(Patient::getEmegencyNr)
.thenComparing(Patient::getIdNr));
Patient p;
while((p = q.poll()) != null)
System.out.println(p);