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

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

boolean[] myArray = new boolean[10];

检查所有值是否为真的最优雅的方法是什么?

159597 次浏览
public static boolean areAllTrue(boolean[] array)
{
for(boolean b : array) if(!b) return false;
return true;
}

这取决于你想找到这些信息的次数,如果不止一次:

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

否则就是一个短路的循环:

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

好吧,这是我能马上想到的“最优雅”的解决方案:

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

希望能帮上忙!

这可能不会更快,也肯定不是很容易阅读。因此,为了丰富多彩的解决方案..。

int i = array.length()-1;
for(; i > -1 && array[i]; i--);
return i==-1
Arrays.asList(myArray).contains(false)

真不敢相信没有 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
}

另一种选择是使用 番石榴:

return Booleans.contains(myArray, true);
boolean alltrue = true;
for(int i = 0; alltrue && i<booleanArray.length(); i++)
alltrue &= booleanArray[i];

我觉得这看起来不错,表现也不错。

在 Java8中,你可以这样做:

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

或者更短:

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

注: 这个解决方案需要 Boolean[]才能正常工作,因为不能使用原语 List。

你可以通过 Arrays.equal方法比较你的数组和其他布尔数组来检查所有值项是真或假,如下例所示:

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

在 Java8 + 中,您可以在 0myArray.length的范围内创建一个 IntStream,并检查所有值是否都是相应(原语)数组中的 true,如下所示,

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

这句话应该足够了:

BooleanUtils.and(boolean... array)

而是为了安抚只有链接的纯粹主义者:

在一组布尔值上执行 an 和。

科特林: 如果一个元素为 false,则不会选择所有元素

return list.filter { isGranted -> isGranted.not() }.isNotEmpty()