Java 优先级通过布尔比较阻塞队列顺序

Java 优先级通过布尔比较阻塞队列顺序,java,multithreading,threadpool,priority-queue,Java,Multithreading,Threadpool,Priority Queue,我想根据布尔值对该队列进行排序,其中true值是要处理的队列中的第一个值。如何在compare()方法中进行比较,以使真值按优先级排序 在当前实现中,false值将首先出现。 要执行相反的操作,您可以取消排序: new PriorityBlockingQueue<>(size, new CompareOrder()); 比较器的工作方式如下: left-right0表示left位于队列的后面 如果它们相等,则返回0 在您的情况下,您希望真实值位于队列的前面。因此,比较这两个布尔值。

我想根据布尔值对该队列进行排序,其中
true
值是要处理的队列中的第一个值。如何在
compare()
方法中进行比较,以使真值按优先级排序

在当前实现中,
false
值将首先出现。 要执行相反的操作,您可以取消排序:

new PriorityBlockingQueue<>(size, new CompareOrder());

比较器的工作方式如下:

left-right<0
表示left在队列的前面

left-right>0
表示left位于队列的后面

如果它们相等,则返回
0

在您的情况下,您希望真实值位于队列的前面。因此,比较这两个布尔值。返回
-1
+1
,具体取决于哪个为真,哪个为假

new PriorityBlockingQueue<>(size, Collections.reverseOrder(new CompareOrder<>()));
公共类CompareOrder实现Comparator{
@凌驾
公共整数比较(左T,右T){
if(left.getSeverity()&&!right.getSeverity()){
return-1;//将left true向上推到队列中
}else if(right.getSeverity()&&!left.getSeverity()){
return 1;//将left false向下推到队列中
}否则{
返回0;//它们是相同的..不执行任何操作
}
}
}

您能在问题中解释一下您当前的代码有什么问题吗?有错误吗?泛型类型需要类型参数:
new CompareOrder()
这不是个好主意。使用两个队列会更好。@EJP使用两个队列的想法是什么?你能举个例子吗?
class CompareOrder<T extends Priority> implements Comparator<T> {
    @Override
    public int compare(T left, T right) {
        return -Boolean.compare(left.getSeverity(), right.getSeverity());
    }
}
new PriorityBlockingQueue<>(size, Collections.reverseOrder(new CompareOrder<>()));
public class CompareOrder<T extends Priority> implements Comparator<T> {

    @Override
    public int compare(T left, T right) {
        if(left.getSeverity() && !right.getSeverity()){
          return -1; //push left true up the queue
        } else if(right.getSeverity() && !left.getSeverity()) {
          return 1;  //push left false down the queue
        } else {
          return 0;  //they are the same..do nothing
        }
    }

}