构造函数中的匿名比较器使用强制转换为Comparable

时间:2017-04-15 22:12:25

标签: java comparator comparable anonymous

我在构造函数中编写匿名比较器时遇到问题。我的指示如下:

"您的代码应该假设密钥类型具有可比性,即实现Comparable"

但是,我们正在使用

private Comparator<K> _comparator;

我们的数据架构还有一个私有类Node:

private static class Node<K,V> extends AbstractEntry<K,V> {
    Node<K,V> left, right;
    Node(K k, V v) {
        super(k,v);
        left = right = null;
    }
} 

我确实尝试过这样写:

public TreeMap() {

    _comparator = (Comparator<K>) new Comparator<Node<K,V>>(){
        @Override
        public int compare(Node<K, V> o1, Node<K, V> o2) {
            return ((Integer) o1.getKey()).compareTo((Integer) o2.getKey());

        }
    };
}

但这并不正确,因为我们不应该比较节点,或假设该键是整数。我也应该使用未经检查的演员来比较,我无法弄清楚如何或在何处这样做。

作业的实际指示如下:

您要编写的类中有两个构造函数:一个用于键类型的比较器,它不能为null。另一个没有,但是如果使用这个构造函数,你的代码应该假设密钥类型是可比较的,即实现Comparable。然后,这个假设用于创建一个使用compareTo方法来完成其工作的比较器。

任何提示或想法都将受到赞赏。

1 个答案:

答案 0 :(得分:1)

行。因此,您需要编写一个比较器,使用它们的自然顺序对可比较的键进行排序。即它应该委托他们的compareTo方法。

所以你想要

Comparator<K> comparator = (a, b) -> ((Comparable<K>) a).compareTo(b);

或者,如果你真的想把它写成一个匿名的内部类:

Comparator<K> comparator = new Comparator<K>() {
    @Override
    public int compare(K a, K b) {
        return ((Comparable<K>) a).compareTo(b);
    }
};