测试布尔值[]中的所有值

时间:2014-04-18 16:59:22

标签: java arrays

我想知道是否有更“整洁”的方法来测试布尔数组中的所有值是否为真/假,而不是迭代遍历数组并单独测试每个值:

for (boolean eval:booleanArray) {
    if (!eval) {
        return false;
    }
}

基本上,我想查看存储在布尔数组中的所有值是否为真,如果是,则执行操作。

我很确定有一种形式的方法,比如array.contains(false),但我可能错了。

4 个答案:

答案 0 :(得分:4)

使用番石榴:

SotiriosDelimanolis指出

// verify all values are true
boolean result = !Booleans.contains(myArray, false);

老帖......

boolean result = Iterables.all(
         Booleans.asList(myArray),
         Predicates.equalTo(true));

使用静态变为:

boolean result = all(asList(myArray), 
                            equalTo(true));

另一个选择是使用集合

boolean result = Sets.newHashSet(Booleans.asList(myArray)).contains(true);

答案 1 :(得分:1)

使用List界面。它的工作原理归功于自动装箱的魔力。

List<Boolean> values = new ArrayList<Boolean>();
// ...populate it ...
if(values.contains(false)) {
    //do something
}

答案 2 :(得分:1)

这绝对是最快的。如果你想 neatinize 它 - 提取到一个单独的方法。

public static boolean testAllTrue(boolean[] booleanArray) {
  for (boolean eval : booleanArray) {
    if (!eval) {
        return false;
    }
  }
  return true;
}

答案 3 :(得分:1)

如果您使用Java8:

其他一些方式:

long falseCount = Arrays.asList(arr).stream().filter(e -> !e).count();

如果falseCount为0,则表示一切都是真的。

allMatch

boolean allTrue = Arrays.asList(arr).stream().allMatch(e -> e);

但使用此系统意味着:

  1. Arrays.asList =&gt;创建列表,复制列表中的所有内容
  2. 将primite类型包装为引用类型(boolean - &gt; Boolean)
  3. 您的foreach方法是最好的方法,但如果您已经在List中有项目,为什么不使用它?