我有一个包含以下患者的优先队列:
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 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
来源: https://codeday.me/bug/20191119/2039288.html