集合排序多项

时间:2013-03-24 13:30:52

标签: java

我目前正在尝试按姓氏排序我的对象,然后是名字,然后是出生日期,然后是ssn。但从逻辑上讲,我只能想出的是姓氏,然后是名字 任何提示?

public int compareTo(Doctor o) 
{
    int result =  this.lastName.compareTo(o.lastName());

    return result == 0 ?this.firstName.compareTo(((Doctor) o).firstName()):result;
}

4 个答案:

答案 0 :(得分:1)

首先在姓氏上排序。如果排序值为0,请对名字进行排序。如果结果为0,请对出生日期进行排序,依此类推。你肯定会有多个return语句,但它的可读性要高得多。

您可能知道,结果值0表示两个值相等。在您的用例中,这应该导致额外的排序,而不是简单地返回值。

编辑:下面的其他答案为此提供了准确的实施。

答案 1 :(得分:1)

嵌套,如果是更好的选择来实现它。

public int compareTo(Doctor o){
    int result =  this.lastName.compareTo(o.lastName());

    if(result==0){
        result = this.firstName.compareTo(o.firstName());
        if(result==0){
             result = this.dob.compareTo(o.dob());
             if(result==0){
                ....
             }
        }
    }
    return result;
}

答案 2 :(得分:1)

您可以使用以下内容:

public int compareTo(Doctor o) 
{
    int result =  this.lastName.compareTo(o.lastName());
    if (result != 0)
        return result;

    result = this.firstName.compareTo(o.firstName());
    if (result != 0)
        return result;

    result = this.birthDate.compareTo(o.birthDate());
    if (result != 0)
        return result;

    return this.ssn.compareTo(o.ssn());
}

答案 3 :(得分:0)

您可能已经意识到,这是一种“责任链”。所以我建议你这个案例的模式。 Chain-of-responsibility Pattern

它会使你免于写太多if()... s