1

これは、クラスEmployeeのメソッドです。id(int)、name、phone、job title(すべて文字列)の4つの変数を含むemployeeの2つのオブジェクトを比較します。

public int compareTo(Employee other) {
    if (this.id == other.id) {
        if (this.name.compareTo(other.name) == 0) {
            if (this.phoneNumber.compareTo(other.phoneNumber) == 0) {
                if (this.jobTitle.compareTo(other.jobTitle) == 0)
                    return 0;
                else if (this.jobTitle.compareTo(other.jobTitle) > 0)
                    return 1;
                else 
                    return -1;
            }
            else if (this.phoneNumber.compareTo(other.phoneNumber) > 0)
                return 1;
            else
                return -1;
        }
        else if (this.name.compareTo(other.name) > 0)
            return 1;
        else
            return -1;
    }
    else if (this.id > other.id)
        return 1;
    else
        return -1;
}

コードは正常に機能しますが、かなり矢印の形になり、少し複雑になっていることを認識しています。このif/elseステートメントのコレクションをクリアするためのアドバイスはありますか?

編集:IDの後に比較を続けるのは直感に反しているように思われるかもしれませんが、これは論理的には一意ですが、それを使用してください。

4

2 に答える 2

1

0を返すには、すべてのチェックが==0である必要があるようです。そのうちの1つが>0の場合は、1を返し、それ以外の場合は-1を返します。

それで:

 if (this.id == other.id &&
     this.name.compareTo(other.name) == 0 &&
     this.jobTitle.compareTo(other.jobTitle) == 0 &&
     this.phoneNumber.compareTo(other.phoneNumber) == 0 ) {
     return 0;
 } else if (this.id > other.id ||
     (this.name.compareTo(other.name) > 0 ||
     this.jobTitle.compareTo(other.jobTitle) > 0 ||
     this.phoneNumber.compareTo(other.phoneNumber) > 0) {
     return 1;
 } else {
     return -1;
 }
于 2013-03-25T00:12:26.620 に答える
0

アイテムのマルチレベルの順序を実装する方法の例については、コレクションソートマルチアイテムを参照してください。

if-elseを使用して0/1を返す代わりに、compareTo呼び出しの結果を返すだけで、コードをはるかに短くできると思います。

于 2013-03-25T00:05:42.097 に答える