我想比较两门课程并按课程名称按字母顺序排序,但我注意到我不能使用"<"或">"。是否有另一种方法可以比较课程是否应该大于或小于另一种课程。
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;
}
}
答案 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
,而不是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());
}
}