java - 按特定值对对象列表进行排序

标签 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.compareTo() 方法的实现不正确,因为它应该比较 2 个对象并返回第一个对象是否更低 (-1)、等于(0) 或更大 ( 1)到第二个(不仅表明它们是否与您的情况相同)。假设 getDefectClassTitle() 返回 String 我会将该方法实现为:

public int compareTo(DefectClass o) {
    return o.getDefectClassTitle().compareTo(this.getDefectClassTitle());
}  

关于java - 按特定值对对象列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23983301/

相关文章:

python - 在每个其他列表项 Python 上使用 map

arrays - 在没有内置 ruby​​ 函数的情况下合并两个排序数组

JavaScript:优化自定义对象文字的排序

java - 在 Java 中将两个大数相乘时避免数字极性反转的最佳方法

java - Spring webflux 中的缓存

java - 列表中项目的随机分布,具有确切的出现次数

c# - 当列表有新项目时引发事件?

c++ - x = malloc(n * sizeof (int));无法将 void 转换为 int

java - 使用 JBOSS JNDI 数据源时,Quartz 在 BLOB 上遇到异常

java - 调用从 Java 返回 Oracle 类型的 PL/SQL 函数