什么是最优雅的方式来检查一个布尔数组中的所有值是否为真?

我在java中有一个布尔数组:

boolean[] myArray = new boolean[10]; 

什么是最优雅的方式来检查是否所有的值是真实的?

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

这取决于您要多less次要查找此信息,如果不止一次:

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

否则,短路回路:

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

在Java 8中,你可以这样做:

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

甚至更短:

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

注意:您需要使用Boolean[]来使此解决scheme起作用。 因为你不能有一个基本列表。

我不敢相信没有BitSet解决scheme。

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.length()) { // do something, there are no false bits in the bitset } 

另一种select是使用番石榴 :

 return Booleans.contains(myArray, true); 

好。 这是我可以在飞行中提出的“最优雅的”解决scheme:

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

希望有所帮助!

这可能不会更快,而且绝对不可读。 所以,为了丰富多彩的解决scheme

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

我认为这看起来不错,performance很好…

我想唯一的方法是迭代。

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

你可以通过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); }