Java自定义比较器不起作用

时间:2014-01-16 19:11:09

标签: java

嘿我想比较我自己的对象,以便我可以在我的arrayList中对它们进行排序,我的对象有3个字段,其中一个是int 我的比较器代码看起来像

public class ImageComparator implements Comparator<Obj> {
    @Override
    public int compare(Obj 1, Obj 2) {

        return 1.Id > 2.Id ? 1 : 0;
    }
}

Collections.sort(myList, new ImageComparator());

我做错了什么?

6 个答案:

答案 0 :(得分:3)

你错过了-1值,

尝试代替条件标准方法,例如:

public class ImageComparator implements Comparator<Obj> {
    @Override
    public int compare(Obj o1, Obj o2) {
        return Integer.compare(o1.Id, o2.Id);
    }
}

答案 1 :(得分:1)

试试这个。您需要在此处检查3个案例(<>=)。

public class ImageComparator implements Comparator<Obj> {
    @Override
    public int compare(Obj o1, Obj o2) {

        if (o1.Id > o2.Id) return 1;
        else if (o1.Id < o2.Id) return -1;
        else return 0;

    }
}

Collections.sort(myList, new ImageComparator());

答案 2 :(得分:0)

如果对象1大于,小于或等于对象2,则比较器的compare方法返回1,-1或0.因此,您需要检查这3个案例并返回正确的值你对象的ID值。

public int compare(Obj ob1, Obj obj2){
    if(obj1.Id > obj2.Id)
        return 1;
    if(obj1.Id < obj2.Id)
        return -1;
    return 0;
}

答案 3 :(得分:0)

首先,您不能将数字用作变量名称。然后看一下javadocs:返回“一个负整数,零或一个正整数,因为第一个参数小于,等于或大于第二个参数。”

答案 4 :(得分:-1)

您不能将数字用作variable/method/class names中的第一个字母。更多变量命名规则Click Here

public class ImageComparator implements Comparator<Obj> {
    @Override
    public int compare(obj obj1, obj obj2) {
        return ((obj)obj1).Id - ((obj)obj2).Id;
    }
}

答案 5 :(得分:-1)

您可以尝试:

 return v1.Id < v2.Id ? -1 : v1.Id > v2.Id ? 1 : 0;