按特定值排序对象列表

时间:2014-06-01 18:54:58

标签: java list sorting comparable

我想按照另一个对象(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的标题对备注列表进行排序......但最后我总是得到相同的列表,没有排序。我做错了什么?

2 个答案:

答案 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()));