Was ist die eleganteste Art zu überprüfen, ob alle Werte in einem booleschen Array wahr sind?

Ich habe ein boolesches Array in Java:

boolean[] myArray = new boolean[10]; 

Was ist die eleganteste Art zu überprüfen, ob alle Werte wahr sind?

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

Es hängt davon ab, wie oft du diese Informationen finden willst, wenn du mehr als einmal willst:

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

Ansonsten eine Kurzschlussschleife:

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

In Java 8 könnten Sie Folgendes tun:

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

Oder noch kürzer:

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

Hinweis: Sie benötigen Boolean[] damit diese Lösung funktioniert. Weil Sie keine primitive Liste haben können.

Ich kann nicht glauben, dass es keine BitSet Lösung gibt.

Ein BitSet ist eine Abstraktion über eine Menge von Bits, so dass wir boolean[] für BitSet Interaktionen nicht mehr benötigen, da es bereits die meisten benötigten Methoden enthält. Es ist auch ziemlich schnell in Batch-Operationen, da es intern long Werte verwendet, um die Bits zu speichern und daher nicht jedes Bit separat prüft, wie wir es mit boolean[] tun.

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

Für Ihren speziellen Fall würde ich cardinality() :

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

Eine andere Alternative ist die Verwendung von Guava :

 return Booleans.contains(myArray, true); 

In Java 8+ können Sie einen IntStream im Bereich von 0 bis myArray.length und myArray.length , dass alle Werte in dem entsprechenden (primitiven) Array mit etwa

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

Dies ist wahrscheinlich nicht schneller und definitiv nicht sehr lesbar. Also, für farbenfrohe Lösungen …

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

OK. Dies ist die “eleganteste” Lösung, die ich mir spontan vorstellen konnte:

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

Ich hoffe, das hilft!

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

Ich denke, das sieht gut aus und verhält sich gut ...

Ich denke, der einzige Weg ist es, zu iterieren.

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

Sie können überprüfen, ob alle Arrays.equal wahr oder falsch sind, indem Sie Ihr Array mit dem anderen booleschen Array über Arrays.equal Methode Arrays.equal wie im folgenden Beispiel vergleichen:

 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); }