我需要根据它的学生卷号
对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;
}
// ...
}
答案 0 :(得分:0)
List
中,项目可以多次次。因此,与0比较的相同Object是未知顺序。请改用Set
,仅Set
阻止重复值。TreeSet
。rollnumber
- 顺序不直观,如果我问你是谁,我希望得到的答案是Max Mustermann
而不是23948234
{1}}。当然这是一个直观的论证和基于意见的论点,但它就像String
这种常见做法的自然决定一样。TreeSet
可以使用comparator
实现构造为构造函数参数,这样可以更好地满足您的需求。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);