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
}
}
}