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());
我想根据 boolean 值对该队列进行排序,其中 true
值位于要处理的队列中的第一个。如何在 compare()
方法中进行比较,以便将真实值按优先级排序?
最佳答案
在当前的实现中,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<>()));
关于java - PriorityBlockingQueue 按 boolean 比较排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40596329/