我有一个包含患者的优先级队列,如下所示:
patientQueue.add(new Patient(idNr, name, emergencyNr));
现在我想先按 emergencyNr 然后按 idNr 对队列进行排序。 “名称”并不重要。
现在我可以对优先级队列进行排序,并在患者中实现:
@Override
public int compareTo(Patient otherRequest) {
return Integer.compare(isEmergencyCase(), otherRequest.isEmergencyCase());
}
如何实现一个也按 IdNr 排序的方法? 因此,如果所有 EmergencyNr 都相等,则最低的 idNr 将排在第一位。
提前谢谢大家!
最佳答案
只需在 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);
关于java - PriorityQueue 按两个值排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32119054/