web-dev-qa-db-ja.com

ブール配列のすべての値が真であるかどうかを確認する最もエレガントな方法は何ですか?

私はJavaでブール配列を持っています:

boolean[] myArray = new boolean[10];

すべての値が真であるかどうかを確認する最もエレガントな方法は何ですか?

52
donturner
public static boolean areAllTrue(boolean[] array)
{
    for(boolean b : array) if(!b) return false;
    return true;
}
70
Eng.Fouad
Arrays.asList(myArray).contains(false)
59
basilikode

Java 8では、次のことができます。

boolean isAllTrue = Arrays.asList(myArray).stream().allMatch(val -> val == true);

またはさらに短く:

boolean isAllTrue = Arrays.stream(myArray).allMatch(Boolean::valueOf);

注:必要ですBoolean[]このソリューションが機能するため。プリミティブリストを作成できないためです。

17
Kapil Sharma

複数回の場合、この情報を検索する回数に依存します。

Set<Boolean> flags = new HashSet<Boolean>(myArray);
flags.contains(false);

それ以外の場合、短絡ループ:

for (i = 0; i < myArray.length; i++) {
  if (!myArray[i]) return false;
}
return true;
15
Rich O'Kelly

BitSet 解決策がないとは信じられません。

BitSetはビットセットの抽象化であるため、必要なメソッドのほとんどが既に含まれているため、より高度な対話のために_boolean[]_を使用する必要はありません。内部的にlong値を使用してビットを保存し、したがって_boolean[]_のようにすべてのビットを個別にチェックしないため、バッチ操作でもかなり高速です。

_BitSet myBitSet = new BitSet(10);
// fills the bitset with ten true values
myBitSet.set(0, 10);
_

特定のケースでは、 cardinality() を使用します。

_if (myBitSet.cardinality() == myBitSet.size()) {
    // do something, there are no false bits in the bitset
}
_

別の選択肢は Guava を使用することです:

_return Booleans.contains(myArray, true);
_
11
Petr Janeček

Java 8+では、0からmyArray.lengthの範囲でIntStreamを作成し、すべての値がtrueであることを確認できます。次のような対応する(プリミティブ)配列、

return IntStream.range(0, myArray.length).allMatch(i -> myArray[i]);
4
Elliott Frisch

その行は十分でなければなりません:

BooleanUtils.and(boolean... array)

しかし、リンクのみの純粋主義者を落ち着かせるには:

ブール値のセットでandを実行します。

3
Gerold Broser

これはおそらく高速ではなく、間違いなく非常に読みやすいものではありません。だから、カラフルなソリューションのために...

int i = array.length()-1;
for(; i > -1 && array[i]; i--);
return i==-1
2
Miquel
boolean alltrue = true;
for(int i = 0; alltrue && i<booleanArray.length(); i++)
   alltrue &= booleanArray[i];

私はこれは大丈夫に見え、うまく動作すると思います...

1
Patrick

以下の例のようなArrays.equalメソッドを使用して、配列を他のブール配列と比較することにより、すべての値項目がtrueまたはfalseであることを確認できます。

private boolean isCheckedAnswer(List<Answer> array) {
    boolean[] isSelectedChecks = new boolean[array.size()];
    for (int i = 0; i < array.size(); i++) {
        isSelectedChecks[i] = array.get(i).isChecked();
    }

    boolean[] isAllFalse = new boolean[array.size()];
    for (int i = 0; i < array.size(); i++) {
        isAllFalse[i] = false;
    }

    return !Arrays.equals(isSelectedChecks, isAllFalse);
}
0
Huy Tower