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

时间:2011-11-24 17:41:20

标签: java arrays boolean

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

boolean[] myArray = new boolean[10];

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

12 个答案:

答案 0 :(得分:70)

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

答案 1 :(得分:57)

Arrays.asList(myArray).contains(false)

答案 2 :(得分:17)

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

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

甚至更短:

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

注意: 您需要Boolean[]才能使此解决方案正常运行。因为你不能有原语列表。

答案 3 :(得分:15)

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

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

否则是短路循环:

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

答案 4 :(得分:11)

我无法相信没有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);

答案 5 :(得分:4)

在Java 8+中,您可以在IntStream0的范围内创建myArray.length,并检查相应(基元)数组中的所有值是否为true有类似的东西,

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

答案 6 :(得分:3)

该行应足够:

BooleanUtils.and(boolean... array)

但要使仅链接的纯粹主义者平静下来:

  

在一组布尔值上执行和。

答案 7 :(得分:2)

这可能不会更快,绝对不是很可读。所以,为了丰富多彩的解决方案...

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

答案 8 :(得分:1)

boolean alltrue = true;
for(int i = 0; alltrue && i<booleanArray.length(); i++)
   alltrue &= booleanArray[i];

我觉得这看起来不错,表现得很好......

答案 9 :(得分:1)

简单地使用 String 将数组转换为 Arrays.toString 并测试它是否包含 false

演示:

import java.util.Arrays;

public class Main {
    public static void main(String args[]) {
        // Test
        System.out.println(areAllValuesTrue(new boolean[] { true, true, true, true }));
        System.out.println(areAllValuesTrue(new boolean[] { true, false, false, true }));
        System.out.println(areAllValuesTrue(new boolean[] { false, false, false, false }));
    }

    static boolean areAllValuesTrue(boolean[] arr) {
        return !Arrays.toString(arr).contains("false");
    }
}

输出:

true
false
false

答案 10 :(得分:0)

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

答案 11 :(得分:-1)

行。这是我能想到的“最优雅”的解决方案:

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

希望有所帮助!