web-dev-qa-db-ja.com

Javaの文字列で比較可能なCompareToを使用する方法

Emp idでソートするために使用できますが、文字列を比較できるかどうかはわかりません。文字列に対して演算子が未定義であるというエラーが表示されます。

public int compareTo(Emp i) {
            if (this.getName() == ((Emp ) i).getName())
                return 0;
            else if ((this.getName()) > ((Emp ) i).getName())
                return 1;
            else
                return -1;
22
Jack

使用する必要があるのは、StringsのcompareTo()メソッドです。

_return this.getName().compareTo(i.getName());
_

それはあなたが望むことをする必要があります。

通常、Comparableインターフェイスを実装するときは、クラスの他のComparableメンバーを使用した結果を集約するだけです。

以下は、compareTo()メソッドの非常に典型的な実装です。

_class Car implements Comparable<Car> {
    int year;
    String make, model;
    public int compareTo(Car other) {
        if (!this.make.equalsIgnoreCase(other.make))
            return this.make.compareTo(other.make);
        if (!this.model.equalsIgnoreCase(other.model))
            return this.model.compareTo(other.model);
        return this.year - other.year;
    }
}
_
46
jjnguy

コードは次のように記述できることを確認してください。

public int compareTo(Emp other)
{
    return this.getName().compareTo(other.getName());
}
7
Sam Day

Java String はすでにComparableを実装しています。したがって、次のようにメソッドを書くことができます。

public int compareTo(Emp emp) {
   return this.getName().compareTo(emp.getName());
}

(もちろん、nullチェックなどの適切な検証を追加してください)

また、コードでは、「==」を使用して文字列を比較しようとしないでください。代わりに「等しい」メソッドを使用してください。 '=='は文字列参照のみを比較しますが、 equals は2つの文字列を意味的に比較します。

5
Gopi

IをEmpにキャストする必要はありません。すでにEmpです。

public int compareTo(Emp i) {
    return getName().compareTo(i.getName());
}
3
Thomas Mueller

すべきではない

if (this.getName() == ((Emp ) i).getName())

なる

if (this.getName().equals(i.getName()))

1
zengr