如何获得Java中的比较的逆(How to get inverse of a comparator

2019-06-28 02:29发布

在方法我接收一个通用object E extends Comparable<E>作为参数。 现在我想创建它使用两个优先queues.One comparator由E和其他队列使用利用的相对comparator用E使用(即如果E使用“<”然后第二队列必须使用“> =”)。 请HEP我如何创建两个这样的队列。

queue2=new PriorityQueue<E>(0,Collections.reverseOrder(e));

我收到错误reverseOrder不适用。

请帮忙

Answer 1:

看看Collections.reverseOrder 。



Answer 2:

你的对象E扩展java.lang.Comparable,但它不是一个java.util.Comparator

创建您的第一个队列瓦特/ OA比较,你会得到的排序在你compareTo功能,然后创建java.util.Comparator ,做反向的比较(只需调用a.compareTo(B),然后否定的结果)和创建你的第二个队列与比较。



Answer 3:

的单个参数Collections.reverseOrder是一个比较,而不是一个集合。 为了您的代码只需使用reverseOrder不带参数。 你必须使用一个非零inital大小了。 下面的代码将正常工作。

queue2=new PriorityQueue<E>(1, Collections.reverseOrder());


Answer 4:

以下程序描述了如何做到这一点。

我有StringLengthComparator其比较基于字符串的长度。 使用Collections.reverseOrder我创建队列这是反向排序,这是正确排序的另一个队列。

import java.util.Collections;
import java.util.Comparator;
import java.util.PriorityQueue;

public class TestReverseorder {
public static void main(String[] args) {
    Comparator<String> comparator = new TestReverseorder().new StringLengthComparator();
    PriorityQueue<String> reverse = new PriorityQueue<String>(10,
            Collections.reverseOrder(comparator));
    PriorityQueue<String> queue = new PriorityQueue<String>(10,comparator);
    queue.add("1");
    queue.add("12");
    queue.add("123");

    reverse.add("1");
    reverse.add("12");
    reverse.add("123");

    while (!queue.isEmpty()) {
        System.out.println(queue.poll());
    }

    while (!reverse.isEmpty()) {
        System.out.println(reverse.poll());
    }


}

public class StringLengthComparator implements Comparator<String> {
    @Override
    public int compare(String x, String y) {
        // Assume neither string is null. Real code should
        // probably be more robust
        if (x.length() < y.length()) {
            return -1;
        }
        if (x.length() > y.length()) {
            return 1;
        }
        return 0;
    }
}
}

这将打印输出

Normal Order:
1
12
123
Reverse Order:
123
12
1


文章来源: How to get inverse of a comparator in java