【问题标题】:Java compareTo method. The student.compareTo method should returnJava compareTo 方法。 student.compareTo 方法应该返回
【发布时间】:2014-04-04 23:27:27
【问题描述】:

我被要求编写一个 student.compareTo 方法,如果两个学生的名字和两个学生的姓氏相同,则该方法应该返回 0。如果学生姓名按字典顺序排序低于传入的名称,则返回负值。如果学生姓名按字典顺序排序高于传入的名称,则返回正值。

到目前为止,这是我的代码。对于负值和正值应该是固定值还是应该使用 compareTo 值?

public int compareTo(Student){
int comparison = (this.firstName.compareTo(Student.firstName));
int comparison2 = (this.lastName.compareTo(Student.lastName));

if (comparison == comparison2)
    return 0;
else if ((comparison=0 && comparison2<0) ||(comparison<0 && comparison2=0)
    return -1;
else
    return 1;
}

这是另一个代码。我想知道我这样做是否正确

public int compareTo(Student){
    String studentinfo=(this.firstName + this.lastName);
String studentinfo2=(s1.firstName + s1.lastName);
int comparison =studentinfo.compareTo(studentinfo2);
return comparison;
}

【问题讨论】:

    标签: java string compareto


    【解决方案1】:

    这太复杂了……

    链接您的比较;仅当第一个返回 0 时,运行第二个;如果第二个返回 0,则运行第三个;等等

    即返回第一个为零的比较结果,或者最后一个。示例:

    @Override
    public int compareTo(final Student other)
    {
        int ret = firstName.compareTo(other.firstName);
        if (ret != 0) // No need to go further
            return ret;
    
        // Hypothetic second comparison to do before lastName
        // ret = foo.compareTo(other.foo);
        // if (ret != 0)
        //     return ret;
    
        // Rinse, repeat...
    
        // All previous comparisons returned 0, 
        // return the result of the last comparison
        return lastName.compareTo(other.lastName);
    }
    

    Guava 对此有一个 nice utility class

    @Override
    public int compareTo(final Student other)
    {
        return ComparisonChain.start()
            .compare(firstName, other.firstName)
            .compare(lastName, other.lastName)
            .result();
    }
    

    【讨论】: