public class CompareOrder<T extends Priority> implements Comparator<T> {
@Override
public int compare(T left, T right) {
return Boolean.compare(left.getSeverity(), right.getSeverity());
}
}
我有PriorityBlockingQueue
我通过比较器:
new PriorityBlockingQueue<>(size, new CompareOrder());
我想根据布尔值来排序这个队列,其中true
值是要处理的队列中的第一个值。如何在compare()
方法中进行比较,以便将真值排序为优先级?
答案 0 :(得分:1)
在当前的实施中,false
值将首先出现。
反过来说,你可以否定顺序:
class CompareOrder<T extends Priority> implements Comparator<T> {
@Override
public int compare(T left, T right) {
return -Boolean.compare(left.getSeverity(), right.getSeverity());
}
}
可替换地,
你可以保持compare
实现相同,
但请将比较器包装在Collections.reverseOrder
:
new PriorityBlockingQueue<>(size, Collections.reverseOrder(new CompareOrder<>()));
答案 1 :(得分:0)
比较器的工作方式如下:
left - right < 0
表示left位于队列的前面
left - right > 0
表示左侧位于队列的后方
如果它们相等,那么您将返回0
。
在您的情况下,您希望真值位于队列的前面。因此,比较两个布尔值。返回-1
或+1
,具体取决于哪一个为真,哪一个为假。
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
}
}
}