2017-03-17 187 views
0

我boolean数组(元素的数量可以比下面更重要的是)合并多个条件:在if语句

boolean [] values = new boolean[] { false, true, false, false, true, true, false, false }; 

,我想所有的值相结合的产物在与“& &”运算符的阵列中。总之,我想要做这样的事情:

return values[0] && values[1] && values[2] && values[3] .... ; 

但随着更清洁,自动的方式(例如使用循环)

回答

3
static boolean and(boolean... values) { 
    for (boolean value : values) { 
     if (!value) { 
      return false; 
     } 
    } 
    return true; 
} 

或用番石榴:

return !Booleans.contains(values, false); 
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); 

如果我错了,请纠正我。谢谢!

1

在Java 8+,你可以使用一个像IntStream

if (IntStream.range(0, values.length).allMatch(i -> values[i])) { 
    // all of values are true 
} 
+0

是不是很烦人,你不能'价值:: []'? – shmosel

+0

@shmosel是的。甚至没有使用'Array',我能做的最好的就是'i - > Array.getBoolean(values,i)' –

+0

或Guava的'Booleans.asList(values):: get'。仍然非常臃肿。 – shmosel

0

如果您的阵列中的一个错误,那么&结果&是假的。

知道这一点,你只需要通过你的数组并检查错误。如果你找到一个,返回false。如果你没有回报真实。有关代码,请参阅shmosel答案。

3

你可以尝试foreach循环

boolean answerSoFar = true; 
for(boolean value : values){ 
    answerSoFar = answerSoFar && value; 
} 
return answerSoFar; 

(NB @shmosel得到了下面的第一个) 由于与条件是用于阵列中的所有布尔值,你也可以返回false每当假在数组中找到;即:

for(boolean value : values){ 
    if(!value){ 
     return false; 
    } 
} 
return true;