首页 文章

使用类似的界面对列表进行排序

提问于
浏览
1

我需要根据它的学生卷号来排序Class列表

I / P - List<Class> classes = new ArrayList<Class>();

o / p - 基于rollnumber的排序列表

public class Class implements Comparable<Class>{

    List<Student> students;

    ...

    @Override
    public int compareTo(Class o) {

    ...
    }

}

我想实现Class的compareTo方法,以便它将根据他们的滚动数比较学生 .

public class Student implements Comparable<Student> {

    String firstname;
    Integer rollnumber;

    public int compareTo(Student o1) {
        if (this.rollnumber == ((Student) o1).rollnumber)
            return 0;
        else if ((this.rollnumber) > ((Student) o1).rollnumber)
            return 1;
        else
            return -1;
    }
    // ...
}

1 回答

  • 0
    • List 中,项目可以在 multiple 次 . 因此,与0比较的相同Object是未知顺序 . 请改用 Set ,只有 Set 可以防止重复值 .

    • 如果您不想要空值,则应使用 TreeSet .

    • rollnumber的比较应该是一个自然的顺序,但是 rollnumber -order不直观,如果我问你谁是第一个学生我希望答案如 Max Mustermann 而不是 23948234 . 当然,这是一个直观的论证和基于意见的观点,但它就像通常的做法那样自然而然地决定了.2868138_ .
      可以使用 comparator 实现构造

    • TreeSet 作为构造函数参数,这将更好地满足您的需求 .

    • 如果你喜欢DRY,请使用 Integer.compare .

    所以我建议:

    private static final Comparator<Student> ROLL_ORDER = new Comparator<Student>(){
        public int compare(Student o1, Student o2) {
            return Integer.compare(o1.rollnumber, o2.rollnumber);
        }
    }
    private final Set<Student> students = new TreeSet<Student>(ROLL_ORDER);
    

相关问题