java - PriorityQueue 按两个值排序

标签 java

我有一个包含患者的优先级队列,如下所示:

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/

相关文章:

java - JComboBox 的行为与 JTextField 不同。我怎样才能让它看起来相似?

Java Reflection - 从子类和父类(super class)中获取字段

java - 在 web.xml 中发现以元素 'display-name' 开头的无效内容

java - JButton 不改变大小

java - Swing , 多屏 , 控制权转移

java - 加载构造函数时值为空

Java发送邮件函数

java - 在android中的不同类之间共享String的内容

java - OpenJPA 中的自动事务

java - scala 与 Java 不匹配和推断类型参数