我有一系列布尔值(元素数量可能超过以下数量):
boolean [] values = new boolean[] { false, true, false, false, true, true, false, false };
我想得到的结果是将数组中的所有值与"&&"运营商。简而言之,我想做这样的事情:
return values[0] && values[1] && values[2] && values[3] .... ;
但是使用更清洁和自动的方式(例如使用循环)
答案 0 :(得分:3)
static boolean and(boolean... values) {
for (boolean value : values) {
if (!value) {
return false;
}
}
return true;
}
或者与番石榴:
return !Booleans.contains(values, false);
答案 1 :(得分:3)
你可以尝试一个foreach循环
boolean answerSoFar = true;
for(boolean value : values){
answerSoFar = answerSoFar && value;
}
return answerSoFar;
(NB @shmosel首先得到以下内容) 由于AND条件用于数组中的所有布尔值,因此只要在数组中找到false,您也可以返回false;即:
for(boolean value : values){
if(!value){
return false;
}
}
return true;
答案 2 :(得分:1)
在Java 8+中,您可以使用IntStream
之类的
if (IntStream.range(0, values.length).allMatch(i -> values[i])) {
// all of values are true
}
答案 3 :(得分:0)
我是C#开发人员,但我知道您可以在Java 8中使用Stream来实现它。类似的东西:
boolean [] values = new boolean[] { false, true, false, false, true, true, false, false };
Stream<Boolean> stream = IntStream.range(0, values.length).mapToObj(idx -> values[idx]);
boolean test = stream.allMatch(i -> i);
如果我错了,请纠正我。谢谢!
答案 4 :(得分:0)
如果阵列中有一个假,那么&amp;&amp;的结果是假的。
知道这一点,你只需要通过你的数组并检查是否错误。如果找到一个,则返回false。如果你不回真。请参阅shmosel答案以获取代码。