如果有StudentUnion
类定义了相应的比较器,并且它成为Student
类的成员对象,它想要在具有相同因子的集合中进行排序(按学生排序) union),然后如何避免重新编码另一个与StudentUnionComparator
几乎完成相同工作的比较器?这种情况有最好的设计吗?
public class Student{
....
private StudentUnion;
....
}
public class StudentUnionComparator implements Comparator<StudentUnion>{
public int compare(StudentUnion s1, StudentUnion s2){
....
return result // 1 or 0;
}
}
答案 0 :(得分:2)
最简单的方法是为您的Comparator
课程创建一个Student
,您将使用它所拥有的StudentUnion
实例进行比较。
列出这个:
public class StudentComparator implements Comparator<Student> {
public int compare(Student s1, Student s2) {
return s1.getStudentUnion().compareTo(s2.getStudentUnion();
}
}
修改:这使您可以灵活地编写另一种方法来对同一Student
中的StudentUnion
进行排序。就像波希米亚人的名字一样回答。
答案 1 :(得分:2)
让StudentUnion
实施Comparable
:
public class StudentUnion implements Comparable<StudentUnion> {
public int compareTo(StudentUnion s) {
....
return result // 1 or 0;
}
}
然后Student
实施Comparable
,首先使用StudentUnion
,然后使用StudnetUnion
比较相同的其他属性:
public class Student implements Comparable<Student> {
public int compareTo(Student s) {
int result = studentUnion.compareTo(s.studentUnion);
if (result != 0)
return result;
// use another field like name to break ties on StudentUnion
return name.compareTo(name);
}
}
答案 2 :(得分:0)
您可以使用StudentUnion的Object instant。对象将接受所有类。
public class CommonComparator implements Comparator<Object> {
public int compare(Object s1, Object s2){
....
return result // 1 or 0;
}
}