按特定属性对对象进行排序

时间:2017-03-02 18:06:34

标签: java comparator

我想比较两门课程并按课程名称按字母顺序排序,但我注意到我不能使用"<"或">"。是否有另一种方法可以比较课程是否应该大于或小于另一种课程。

import java.util.Comparator;

/**
 * A class that overrides the natural order comparison of courses to order
 * them alphabetically by course name.
 *
 */
public class CourseComparator implements Comparator<Course> {
    @Override
    public int compare(Course o1, Course o2) {
        if(o1.getName() == o2.getName()){
            return o1.compareTo(o2);
        if(o1.getName() < o2.getName())
            return 1;
        return -1;
    }
}

1 个答案:

答案 0 :(得分:1)

  • == 如果两个操作数都是原始数据类型,它将进行值比较。 String是一个Class而不是一个原始数据类型。

  • < > 是运算符,只适用于原始数据类型,如int,double ...

对象比较

  • == 如果它们是同一个对象,它们将与对象进行比较。

  • .equals(Object o) 如果值相同,将比较两个对象。因此,您可以重载此方法,您必须通过“相等”检查类的作者的含义。对于String类.equals表示相同的String。

  • .compareTo(String s) 字符串比较是在before( - ),after(+)和equals(0)之间的含义。

您的示例

.compareTo

上使用.getName()
public class CourseComparator implements Comparator<Course> {
    @Override
    public int compare(Course o1, Course o2) {
        return o1.getName().compareTo(o2.getName());
    }
}

Interface Comparable

顺便说一句,您可以实现Interface Comparable,而不是Arrays.sort(Object[] a)Collections.sort(List<T> list))的排序选项,不需要比较器。

public class Course implements Comparable<Course> {
    ...
    @Override
    public int compareTo(Course otherCourse) {
        return getName().compareTo(otherCourse.getName());
    }
}