私は以下によって構成されるクラス(Comparableを実装する)を持っています:
double[1][2];
私はarrayListをソートし、この方法で試しましたが、エラーを報告しました:
public double compareTo(Matrix another) {
return this.getCell(0,1).compareTo(another.getCel(0,1));
}
このように並べ替えるにはどうすればよいでしょうか。
私は以下によって構成されるクラス(Comparableを実装する)を持っています:
double[1][2];
私はarrayListをソートし、この方法で試しましたが、エラーを報告しました:
public double compareTo(Matrix another) {
return this.getCell(0,1).compareTo(another.getCel(0,1));
}
このように並べ替えるにはどうすればよいでしょうか。
おそらく、 への呼び出しはメソッドを持たないをgetCell()
返します(( など)。double
compareTo()
また、インターフェイスのcompareTo()
メソッドはではなくCompareae
を返す必要があります。int
double
これを試して:
public int compareTo(Matrix another) {
double diff = getCell(0,1) - another.getCel(0,1);
return diff == 0 ? 0 : diff > 0 ? 1 : -1;
}
このソリューションは、すべての Java バージョンで機能します。Java 7+ の場合、代わりに次のようにすることができます。
public int compareTo(Matrix another) {
return Double.compare(getCell(0, 1), another.getCell(0, 1));
}
this.
また、コードから冗長を削除するわずかなクリーンアップにも注意してください。
あなたの質問はあまり明確ではなく、SSCCEを投稿すると役立ちます。しかし、 return であるため、getCell
メソッドdouble
はおそらく次のようになります。
public int compareTo(Matrix another) {
return Double.valueOf(this.getCell(0, 1))
.compareTo(Double.valueOf(another.getCell(0, 1)));
}
これが機能する方法は、比較される各double
プリミティブをDouble
オブジェクトにラップすることです。Double
は を実装しているためComparable<Double>
、メソッドは に委譲できますDouble.compareTo
。
または、静的ユーティリティ メソッドを使用することもできますDouble.compare(double, double)
。
public int compareTo(Matrix another) {
return Double.compare(this.getCell(0, 1), another.getCell(0, 1));
}
これはより簡潔であるため好ましいですが、最初の解決策について言及したかったのは、プリミティブを対応するオブジェクトにボックス化する必要があるためです。これは、クラスメソッドを利用したり、コレクションでプリミティブを使用したりするために一般的に必要になることがよくあります。