我想按照另一个对象(DefectClass)中包含的值对对象列表(备注)进行排序。
public class Remark {
private int remarkId;
private DefectClass defectClass;
}
我有一个备注列表,我正在使用此代码按缺陷类的标题对它们进行排序:
Collections.sort(remarks, new Comparator<Remark>()
{
@Override
public int compare(Remark arg0, Remark arg1) {
return arg0.getDefectClass().compareTo(arg1.getDefectClass());
}
});
这是我的DefectClass模型中的方法比较:
public class DefectClass implements Comparable<DefectClass> {
private String DefectClassTitle;
/* Getters And Setters */
@Override
public int compareTo(DefectClass o) {
if(o.getDefectClassTitle().equals(this.getDefectClassTitle()))
return 0;
else
return 1;
}
通过这些代码我想通过这些备注的DefectClass的标题对备注列表进行排序......但最后我总是得到相同的列表,没有排序。我做错了什么?
答案 0 :(得分:4)
DefectClass.compareTo()
方法的实现是不正确的,因为它应该比较2个对象并返回第一个是低(-1),等于(0)还是更高(1)到第二个(并且不仅表明它们是否与您的情况相同)。假设getDefectClassTitle()
正在返回String
,我将该方法实现为:
public int compareTo(DefectClass o) {
return o.getDefectClassTitle().compareTo(this.getDefectClassTitle());
}
答案 1 :(得分:1)
您无需实施Comparable
,因为您提供自己的Comparator
使用方法如下:
Collections.sort(remarks, (r1, r2) -> r1.getDefectClass().getDefectClassTitle().compareTo(r2.getDefectClass().getDefectClassTitle()));