[英]How to apply a logical operator to all elements in Java
我需要将&&
(逻辑和)运算符应用于列表中的所有元素。 问题是:在我当前的解决方案中,我需要初始化rowResult
变量,并且我认为结果可能因为变量具有初始值而变得无效。
ArrayList<Boolean> results = new ArrayList<>();
for (i = 1; i < results.size(); i++) {
rowResult = rowResult && results.get(i);
}
在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;
}
});
正如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为空的情况。
在java 8+中,您还可以使用reduce
而不是allMatch
。 我认为它更清洁:
boolean result = results.stream().reduce(Boolean::logicalAnd).orElse(false);
您可以使用所需的运算符替换logicalAnd
。 Boolean
类包含所有运算符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.