我有一个包含患者的优先级队列:
patientQueue.add(new Patient(idNr, name, emergencyNr));
现在我想首先通过emergencyNr然后再使用idNr对队列进行排序。 “名字”无关紧要。
现在,我可以对患者实施的优先级队列进行排序:
@Override
public int compareTo(Patient otherRequest) {
return Integer.compare(isEmergencyCase(), otherRequest.isEmergencyCase());
}
如何实现同样按IdNr排序的方法? 因此,如果所有EmergencyNr都是等于那么最低的idNr将是第一个。
先谢谢你们!
答案 0 :(得分:3)
只需在compareTo()
中添加其他条件:
@Override
public int compareTo(Patient otherRequest) {
int r = Integer.compare(emergencyNr, otherRequest.emergencyNr);
return r == 0 ? Integer.compare(idNr, otherRequest.idNr) : r;
}
或使用接受Comparator
的构造函数,例如:
Queue<Patient> q
= new PriorityQueue<>(CAPACITY, Comparator.comparing(Patient::getEmegencyNr)
.thenComparing(Patient::getIdNr));
P上。 S.要检查正确性,请使用poll()
而不是直接打印队列内容:
Patient p;
while((p = q.poll()) != null)
System.out.println(p);
答案 1 :(得分:0)
Hava看一下https://stackoverflow.com/a/683049/197574
使用构造函数public PriorityQueue(int initialCapacity, Comparator comparator)。
你的Coparator应该包含这样的东西
if (this.emergency != other.emergency)
return other.emergency - this.emergency
else
return other.id - this.id