我需要根据学生名次对类(class)列表进行排序
I/P - List<Class> classes = new ArrayList<Class>();
o/p - 根据卷号排序列表
public class Class implements Comparable<Class>{
List<Student> students;
...
@Override
public int compareTo(Class o) {
...
}
}
我想实现类的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;
}
// ...
}
最佳答案
- 在
List
一个项目可以出现多次次。因此,与 0 进行比较的同一对象是未知顺序。使用Set
相反,只有Set
防止重复值。 - 如果您不喜欢空值,则应使用
TreeSet
. - 卷号的比较应采用自然顺序,但
rollnumber
-顺序并不直观,如果我问你谁是第一个学生,我希望得到像Max Mustermann
这样的答案而不是23948234
。当然,这是一个直观的论证并且基于意见,但它就像自然排序的决定String
,这是常见的做法。 -
TreeSet
可以使用comparator
构建作为构造函数参数实现,这将更适合您的需求。 - 如果您喜欢 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);
关于java - 使用类似的界面对列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26097379/