いくつかのクラス_implements Comparator
_が必要です。そのために、プリミティブboolean
(Boolean
ではない)の値を比較したいと思います。
[〜#〜] b [〜#〜] ooleanの場合、0、-1、または1を返すreturn boolA.compareTo(boolB);
だけになります。しかし、これを行うにはどうすればよいですか。プリミティブで?
あなたはそれがどのように実装されているかを調べることができます Java.lang.Boolean
、そのクラスは当然、プリミティブブール値も使用するため:
public int compareTo(Boolean b) {
return (b.value == value ? 0 : (value ? 1 : -1));
}
Java 7以降、 Marko Topolnikが彼の回答で示した のロジックは、プリミティブboolean
を比較する方法を公開するために別のメソッドに移動しました。
Javadoc for Boolean.compare(boolean x, boolean y)
:
public static int compare(boolean x, boolean y)
Compares two boolean values. The value returned is identical to
what would be returned by:
Boolean.valueOf(x).compareTo(Boolean.valueOf(y))
Boolean-Adapterクラスのさらに優れたアプローチと正しい使用
public int compare(boolean lhs, boolean rhs) {
return Boolean.compare(lhs, rhs);
}
編集:
ヒント:これは「false」値を最初にソートします。並べ替えの使用を逆にしたい場合:
(-1 * Boolean.compare(lhs, rhs))
Javaのオートボクシング機能を使用して、この問題を軽減できます。ここでオートボクシングについて読むことができます: Javaオートボクシング
次の方法で、2つのプリミティブブール値b1とb2を比較できます。
(Boolean.valueOf(b1).equals(Boolean.valueOf(b2))