web-dev-qa-db-ja.com

プリミティブブール型のコンパレータを実装しますか?

いくつかのクラス_implements Comparator_が必要です。そのために、プリミティブbooleanBooleanではない)の値を比較したいと思います。

[〜#〜] b [〜#〜] ooleanの場合、0、-1、または1を返すreturn boolA.compareTo(boolB);だけになります。しかし、これを行うにはどうすればよいですか。プリミティブで?

16
membersound

あなたはそれがどのように実装されているかを調べることができます Java.lang.Boolean 、そのクラスは当然、プリミティブブール値も使用するため:

public int compareTo(Boolean b) {
    return (b.value == value ? 0 : (value ? 1 : -1));
}
26
Marko Topolnik

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))
10
mkobit

Boolean-Adapterクラスのさらに優れたアプローチと正しい使用

public int compare(boolean lhs, boolean rhs) {
    return Boolean.compare(lhs, rhs);
}

編集:

ヒント:これは「false」値を最初にソートします。並べ替えの使用を逆にしたい場合:

(-1 * Boolean.compare(lhs, rhs))
3
Spektakulatius

Javaのオートボクシング機能を使用して、この問題を軽減できます。ここでオートボクシングについて読むことができます: Javaオートボクシング

2
Adam Arold

次の方法で、2つのプリミティブブール値b1とb2を比較できます。

(Boolean.valueOf(b1).equals(Boolean.valueOf(b2))

0
Srikar