如何在java中使用类的字段实现优先级队列

如何在java中使用类的字段实现优先级队列,java,priority-queue,Java,Priority Queue,我有一个名为MeterReading的java类,它有两个字段stringmetername和intmeterlevel 现在,如果MeterLevel介于0和3之间,则为低,当介于3和6之间时,中等和高于6的为高。如何将该类MeterReading传递给优先级队列?这可能吗?您必须实现类的可比接口。诀窍是添加一个方法来获取compareTo方法中使用的levelClass(低、中、高) public class MeterReading implements Comparable {

我有一个名为
MeterReading
的java类,它有两个字段
stringmetername
intmeterlevel


现在,如果
MeterLevel
介于0和3之间,则为低,当介于3和6之间时,中等和高于6的为高。如何将该类
MeterReading
传递给优先级队列?这可能吗?

您必须实现类的
可比接口。诀窍是添加一个方法来获取
compareTo
方法中使用的
levelClass
(低、中、高)

public class MeterReading implements Comparable {
    public static final int LOW = 0;
    public static final int MEDIUM = 1;
    public static final int HIGH = 2;

    private String name;
    private double level;

    ... // Constructor, getter setter and business logic methods

    public int getLevelClass() {
        if (level < 3) {
            return LOW;
        } else if (level < 6) {
            return MEDIUM;
        } else {
            return HIGH;
        }
    }

    public int compareTo(MeterReading m2) {
        return getLevelClass() - m2.getLevelClass();
    }
}
若要将
MeterReading
添加到
PriorityQueue
中,请仅添加它

MeterReading mr = ....;
PriorityQueue pq = ....;
....
pq.add(mr);

您想按meterLevel还是按Low/Medium/High进行排序?通过调用
q.add(reading)将读取传递到队列MeterReading mr = ....;
PriorityQueue pq = ....;
....
pq.add(mr);