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



给定一个布尔值数组/列表,如:

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

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

我试过guava style:

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,因为它是空不容忍的)

如果你想用命令式的方式写,定义一个方法来检查正确性:

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

然后调用like

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

你可以直接使用流

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

Stream.of()创建一个包含四个布尔值的新流。anyMatch()检查它们是否满足传递的布尔谓词最后,x -> x是一个lambda,它接受布尔值并返回布尔值。因为我们想检查true是否是参数之一,所以我们可以这样做。这将接受元素并返回该元素,该元素是一个布尔值,将为True, False或null。如果为真,anyMatch()也将返回真。如果它们都不为真(False或null),则返回False

最新更新