0

現在、姓、名、生年月日、ssn の順にオブジェクトを並べ替えようとしています。しかし、論理的に私が思いつくことができるのは、姓と名だけです。何かヒントはありますか?

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

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

4 に答える 4

1

これを実装するには、ネストされた if の方が適しています。

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;
}
于 2013-03-24T13:37:41.180 に答える
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());
}
于 2013-03-24T13:38:03.823 に答える
1

姓の最初の並べ替え. 並べ替え値が の場合、名で並べ替えます0。その結果が の場合、0生年月日などで並べ替えます。確かに複数のステートメントがありますがreturn、はるかに読みやすくなっています。

ご存じのとおり、 の結果値0は、2 つの値が等しいことを意味します。あなたのユースケースでは、これにより、単に値を返すのではなく、追加の並べ替えが行われるはずです。

編集:以下の他の回答は、これの正確な実装を提供しています。

于 2013-03-24T13:35:31.533 に答える
0

お気づきかもしれませんが、これは一種の「責任の連鎖」です。ですから、この場合のパターンをお勧めします。責任連鎖パターン

if()... を書きすぎないようにします

于 2013-03-24T13:57:45.753 に答える