¿Cuál es la forma más elegante de verificar si todos los valores en una matriz booleana son verdaderos?

Tengo una matriz booleana en java:

boolean[] myArray = new boolean[10]; 

¿Cuál es la manera más elegante de verificar si todos los valores son verdaderos?

 public static boolean areAllTrue(boolean[] array) { for(boolean b : array) if(!b) return false; return true; } 
 Arrays.asList(myArray).contains(false) 

Depende de cuántas veces va a querer encontrar esta información, si es más de una vez:

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

De lo contrario, un bucle en cortocircuito:

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

En Java 8, podrías hacer:

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

O incluso más corto:

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

Nota: Necesita Boolean[] para que esta solución funcione. Porque no puedes tener una lista de primitivos.

No puedo creer que no BitSet solución BitSet .

Un BitSet es una abstracción sobre un conjunto de bits, por lo que ya no es necesario usar boolean[] para interacciones más avanzadas, porque ya contiene la mayoría de los métodos necesarios. También es bastante rápido en operaciones por lotes, ya que internamente utiliza valores long para almacenar los bits y, por lo tanto, no comprueba cada bit por separado como lo hacemos con boolean[] .

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

Para su caso particular, usaría cardinality() :

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

Otra alternativa es usar Guava :

 return Booleans.contains(myArray, true); 

En Java 8+, puede crear un IntStream en el rango de 0 a myArray.length y verificar que todos los valores sean true en la matriz correspondiente (primitiva) con algo así como:

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

Esto probablemente no sea más rápido, y definitivamente no es muy legible. Entonces, por el bien de soluciones coloridas …

 int i = array.length()-1; for(; i > -1 && array[i]; i--); return i==-1 

DE ACUERDO. Esta es la solución “más elegante” que pude encontrar sobre la marcha:

 boolean allTrue = !Arrays.toString(myArray).contains("f"); 

¡Espero que ayude!

 boolean alltrue = true; for(int i = 0; alltrue && i 

Creo que esto se ve bien y se comporta bien ...

Supongo que la única forma es iterar.

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

Puede verificar que todos los ítems de valor sean verdaderos o falsos al comparar su matriz con la otra matriz booleana a través del método Arrays.equal como el siguiente ejemplo:

 private boolean isCheckedAnswer(List 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); }