如何检查至少一个布尔值是否为真?

How to check whether at least one boolean is true?

给定 array/list 个布尔值,例如:

Boolean a = true;
Boolean b = true;
Boolean c = false;
Boolean d = null;

我想检查是否至少有一个布尔值为真。所以样本应计数 true=2 (a + b).

我试过番石榴风格:

return Booleans.contains(
        new boolean[] {a, b, c, d}, true);

但结果是 NPE。

您能指出一个更简单的解决方案吗?

因为任何布尔值都可以为空:

return Stream.of(a, b, c, d).anyMatch(Boolean.TRUE::equals);

return Arrays.asList(a, b, c, d).contains(Boolean.TRUE);

(您不能使用 List.of,因为它不能容忍 null)

如果你想写得更命令式,定义一个方法来检查真实性:

boolean isTrue(Boolean b) {
  return Boolean.TRUE.equals(b);
}

然后像这样调用

return isTrue(a) || isTrue(b) || isTrue(c) || isTrue(d);

你可以只使用流

return Stream.of(a,b,c,d).anyMatch(x -> x);

Stream.of() 创建四个布尔值的新 Stream。 anyMatch() 检查它们是否满足传递的布尔谓词 最后,x -> x 是一个接受布尔值的 lamda,returns 是一个布尔值。由于我们要检查 true 是否是参数之一,我们可以这样做。这将采用元素和 return 元素,作为布尔值将是 True、False 或 null。如果为真,anyMatch() 也将 return 为真。如果其中 none 为真(假或空)则它将 return 为假,