Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 优先级队列按两个值排序_Java - Fatal编程技术网

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);