如何检查至少一个布尔值是否为真?
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 为假,
给定 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 为假,