Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 尝试使用比较器时出错_Java - Fatal编程技术网

Java 尝试使用比较器时出错

Java 尝试使用比较器时出错,java,Java,我不知道我做错了什么,但当我尝试将公共最终比较器cmp初始化为一个值时,我得到了一个错误 public class FastGetListMM<K,V> extends AbstractListMM<K,V> { // Comparator used to sort elements; may be null if elements are Comparable public final Comparator<K> cmp;

我不知道我做错了什么,但当我尝试将
公共最终比较器cmp
初始化为一个值时,我得到了一个错误

public class FastGetListMM<K,V> extends AbstractListMM<K,V> {

    // Comparator used to sort elements; may be null if elements are Comparable
    public final Comparator<K> cmp;    
    private List<K> keys;;
    private List<V> values;

    // Assume elements must be comparable
    public FastGetListMM(ArrayList<K> keys, ArrayList<V> values)
    {
        super(keys, values);
        //this.cmp = new Comparator<K>(); <<----error
    }

    // Use the given comparator to sort the keys
    public FastGetListMM(Comparator<K> cmp)
    {
        super(cmp); <<-----error
        //this.cmp = cmp;  <<----error
    }
公共类FastGetListMM扩展了AbstractListMM{
//用于对元素进行排序的比较器;如果元素具有可比性,则可能为空
公共最后比较国;
私有列表密钥;;
私有列表值;
//假设元素必须是可比较的
公共FastGetListMM(ArrayList键、ArrayList值)
{
超级(键、值);
//this.cmp=新比较器();通过以下方式:

this.cmp = new Comparator<K>(); 
this.cmp=新的比较器();
您尝试直接实例化,这是不允许的。您必须首先创建实现
比较器的类,或实例化匿名类,如:

this.cmp = new Comparator<K>(){
    @Override
    public int compare(K k1, K k2) {
        // compare k1 and k2 here
    }
}
this.cmp=新比较器(){
@凌驾
公共整数比较(kk1,kk2){
//在这里比较k1和k2
}
}
或者指定一个lambda,如:

Comparator<K> cmp = (k1, k2) -> { /* compare k1 to k2 */ };
比较器cmp=(k1,k2)->{/*比较k1到k2*/};

如果您喜欢类,请使用以下习惯用法:

public static class MyComparator<K> implements Comparator<K> {
    @Override
    public int compare(K k1, K k2) {
        // compare k1 to k2
    }
}
公共静态类MyComparator实现Comparator{
@凌驾
公共整数比较(kk1,kk2){
//比较k1和k2
}
}
然后,在外部代码中实例化该类:

Comparator<K> cmp = new MyComparator<>();
Comparator cmp=new MyComparator();
通过以下方式:

this.cmp = new Comparator<K>(); 
this.cmp=新的比较器();
您尝试直接实例化,这是不允许的。您必须首先创建实现
比较器的类,或实例化匿名类,如:

this.cmp = new Comparator<K>(){
    @Override
    public int compare(K k1, K k2) {
        // compare k1 and k2 here
    }
}
this.cmp=新比较器(){
@凌驾
公共整数比较(kk1,kk2){
//在这里比较k1和k2
}
}
或者指定一个lambda,如:

Comparator<K> cmp = (k1, k2) -> { /* compare k1 to k2 */ };
比较器cmp=(k1,k2)->{/*比较k1到k2*/};

如果您喜欢类,请使用以下习惯用法:

public static class MyComparator<K> implements Comparator<K> {
    @Override
    public int compare(K k1, K k2) {
        // compare k1 to k2
    }
}
公共静态类MyComparator实现Comparator{
@凌驾
公共整数比较(kk1,kk2){
//比较k1和k2
}
}
然后,在外部代码中实例化该类:

Comparator<K> cmp = new MyComparator<>();
Comparator cmp=new MyComparator();


您遇到了什么错误?您的
AbstractListMM
类是否有比较器?
comparator
是接口,您不能通过
new
直接实例化它。或者您需要为它实例化匿名类。@Razib,不,它没有。@smcrohan
无法实例化类型比较器
您遇到了什么错误获取?您的
AbstractListMM
类是否有比较器?
comparator
是接口,您不能通过
new
直接实例化它。或者您需要为它实例化匿名类。@Razib,不,它没有。@smcrohan
不能实例化类型比较器
@JonK
comparator
是接口;看@TNT,这就是我匆忙得到的!我要嘘嘘然后回家。我试过了,@SashaSalauyou,无论我尝试什么,我得到的
都不能实例化类型比较器
。有什么我需要做的吗?我应该把
实现比较器
放在类的名称中吗?lambda表达式将抛出一个错误,因为它不可用已知
K
的类型是否实现
java.lang.Compariable
。要使其工作
MyComparator
必须是
MyComparator@TNT举个例子,如果你比较hashcode(例如),K的类型可以是无界的。@JonK
Comparator
是一个接口;请看@TNT,这就是我匆忙得到的!我要嘘嘘然后回家。我试过了,@SashaSalauyou,我试过的任何东西,我得到的
都不能实例化类型比较器
。我需要做什么吗?我应该把
实现比较器
放在类的名称?lambda表达式将抛出错误,因为不知道
K
的类型是否实现了
java.lang.Compariable
。要使其工作,MyCompariator
必须是
MyComparator@TNT举个例子,若你们比较hashcode(例如),K的类型可以是无界的。