嘿我想比较我自己的对象,以便我可以在我的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());
我做错了什么?
答案 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;