Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用Comparator对ArrayList进行排序?变量i';m的排序方式是int_Java_Sorting - Fatal编程技术网

Java 如何使用Comparator对ArrayList进行排序?变量i';m的排序方式是int

Java 如何使用Comparator对ArrayList进行排序?变量i';m的排序方式是int,java,sorting,Java,Sorting,我创建了一个名为Course的类,它有一个courseID字段,我想按它排序。我很难把它编译好。这是我课堂上的一部分: class Course implements Comparable<Course> { private String courseName; private int courseID; public String getCourseName() { return courseName; } public

我创建了一个名为Course的类,它有一个courseID字段,我想按它排序。我很难把它编译好。这是我课堂上的一部分:

class Course implements Comparable<Course> {
    private String courseName;
    private int courseID;

    public String getCourseName() {
        return courseName;
    }

    public void setCourseName(String courseName) {
        this.courseName = courseName;
    }

    public int getCourseID() {
        return courseID;
    }

    public void setCourseID(int courseID) {
        this.courseID = courseID;
    }
}
课程实施可比性{
私有字符串courseName;
私人国际法院;
公共字符串getCourseName(){
返回courseName;
}
公共void setCourseName(字符串courseName){
this.courseName=courseName;
}
public int getCourseID(){
返回路线ID;
}
公共无效setCourseID(int courseID){
this.courseID=courseID;
}
}
现在,根据我的理解,我需要实现如何对其进行排序,因此我开始编写以下内容:

class IDSorter implements Comparator<Course>{
    public int compare(Course course1, Course course2) {
        return course1.getCourseID().compareTo(course2.getCourseID()); //no good here already
    }
}
类IDSorter实现比较器{
公共整数比较(课程1、课程2){
返回course1.getCourseID().compareTo(course2.getCourseID());//这里已经不好了
}
}
编译器抱怨“无法对基元类型int调用compareTo(int)”


所以我不能在基元类型上使用compareTo。。。。那么,我该如何解决这个问题呢?

您正在尝试对基元类型调用一个方法:

int courseID = ...;
courseID.compareTo(...);
这是不可能的。相反,您可以使用:

或者,在您的具体情况下:

class IDSorter implements Comparator<Course>{
    public int compare(Course course1, Course course2) {
        return Integer.compare(course1.getCourseID(), course2.getCourseID());
    }
}
但是,如果这样做,则需要对由于整数溢出而导致的边缘情况进行特殊处理(在您的场景中可能不太可能)。
Integer.compare()
的实现通过以下简单方式避免了这些问题:

公共静态整数比较(整数x,整数y){
回报率(x
compare()的契约很明确:必须返回一个负整数,即first小于second,正整数first大于second,或者如果first等于second,则返回0。这应该很容易实现

但您甚至不必这样做,因为Integer已经有了这样一个方法:

return Integer.compare(first, second);

请看,这是真的,尽管编译器错误的根源和根源是试图对基元类型(
int
)调用方法(
compareTo()
)。我的意思是“compare()的契约,而不是compareTo()的契约”.Fixed now。我很高兴你这么说,我在我的帖子中犯了完全相同的错误。你犯了相反的错误:Comparable-->compareTo.Comparator-->compare。我用compareTo作为比较器。你的答案使用compare,作为Comparable。谢谢;这让人困惑。@JBNizet我添加了更多的边缘案例,然后完全因为我不想因为这些细节而分心。
return course1.getCourseID() - course2.getCourseID();
public static int compare(int x, int y) {
    return (x < y) ? -1 : ((x == y) ? 0 : 1);
}
return Integer.compare(first, second);