如何重用成员对象的比较器

时间:2013-07-16 14:52:07

标签: java comparator

如果有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;
    }
}

3 个答案:

答案 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;
    }
}