我想知道是否有更“整洁”的方法来测试布尔数组中的所有值是否为真/假,而不是迭代遍历数组并单独测试每个值:
for (boolean eval:booleanArray) {
if (!eval) {
return false;
}
}
基本上,我想查看存储在布尔数组中的所有值是否为真,如果是,则执行操作。
我很确定有一种形式的方法,比如array.contains(false)
,但我可能错了。
答案 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);
但使用此系统意味着:
您的foreach方法是最好的方法,但如果您已经在List中有项目,为什么不使用它?