java - PriorityBlockingQueue 按 boolean 比较排序

标签 java multithreading threadpool priority-queue

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/

相关文章:

java - jWebsocket 大量停放线程(等待)

java - Thread在线程池执行时抛出异常会怎样?

java - 在 Java 中使用 FFT 从 .wav 创建频谱图

java - 如何配置用于 junit 测试的 eclipse 类路径?

c# - C#中的线程同步

c# - 如何使用 MemoryCache 代替 Timer 来触发方法?

java - 等待监视器的线程

java - 在 Dos 命令提示符中检查 Scala 的当前版本

java - 如何正确关闭这些线程

python - 如何使用共享内存而不是通过多个进程之间的酸洗来传递对象