我需要将&&
(逻辑和)运算符应用于列表中的所有元素。问题是:在我目前的解决方案中,我需要初始化rowResult
变量,我认为由于变量具有初始值,结果可能会变得无效。
ArrayList<Boolean> results = new ArrayList<>();
for (i = 1; i < results.size(); i++) {
rowResult = rowResult && results.get(i);
}
答案 0 :(得分:7)
在Java 8中,您可以使用流:
boolean rowResult = results.stream().allMatch(b -> b);
在Java 8之前,有Guava:
boolean rowResult = Iterables.all(results, new Predicate<Boolean>() {
@Override
public boolean apply(Boolean input) {
return input;
}
});
答案 1 :(得分:6)
正如Jon Skeet或CherryDT所述,您可以使用true初始化rowResult。然后你的代码看起来像:
boolean rowResult = true;
for (Boolean el: list) {
rowResult = el && rowResult;
}
如果想要使用运算符OR
- ||
,则初始值应设置为false
,运算符设置为||
。
在Java 8中,您可以对流应用use reduce
方法:
List<Boolean> list = new ArrayList<>();
boolean rowResult = list.stream().reduce((a,b)-> a && b).orElse(true);
后者具有以下优势:您可以应用任何逻辑运算符而不是&&
。
在java 8示例中,可以将运算符更改为例如||
以应用OR
。 orElse
语句中的值仅适用于list为空的情况。
答案 2 :(得分:1)
在Java 8+中,您也可以使用reduce
代替allMatch
。我认为它更干净:
boolean result = results.stream().reduce(Boolean::logicalAnd).orElse(false);
您可以将logicalAnd
替换为所需的运算符。 Boolean
类具有所有运算符。