我需要申请 && 对列表中的所有元素使用(逻辑and)运算符。问题是:在我当前的解决方案中,我需要初始化 rowResult 变量,我认为结果可能会变得无效,因为变量有一个初始值。
&&
rowResult
ArrayList<Boolean> results = new ArrayList<>(); for (i = 1; i < results.size(); i++) { rowResult = rowResult && results.get(i); }
qvk1mo1f1#
正如jonskeet或cherrydt所指出的,您可以用true初始化rowresult。那么你的代码可能看起来像:
boolean rowResult = true; for (Boolean el: list) { rowResult = el && rowResult; }
如果你想用运算符 OR - || 初始值应设置为 false 和操作员到 || .在Java8中,您可以使用 reduce 流的方法:
OR
||
false
reduce
List<Boolean> list = new ArrayList<>(); boolean rowResult = list.stream().reduce((a,b)-> a && b).orElse(true);
后者的优点是可以应用任何逻辑运算符而不是 && .在Java8示例中,只需将操作符更改为 || 申请 OR . 中的值 orElse 语句仅适用于列表为空的情况。
orElse
hs1rzwqc2#
在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; } });
mwkjh3gx3#
在Java8+中,还可以使用 reduce 而不是 allMatch . 在我看来它更干净: boolean result = results.stream().reduce(Boolean::logicalAnd).orElse(false); 你可以替换 logicalAnd 你需要的接线员。这个 Boolean 类具有所有运算符。
allMatch
boolean result = results.stream().reduce(Boolean::logicalAnd).orElse(false);
logicalAnd
Boolean
3条答案
按热度按时间qvk1mo1f1#
正如jonskeet或cherrydt所指出的,您可以用true初始化rowresult。那么你的代码可能看起来像:
如果你想用运算符
OR
-||
初始值应设置为false
和操作员到||
.在Java8中,您可以使用
reduce
流的方法:后者的优点是可以应用任何逻辑运算符而不是
&&
.在Java8示例中,只需将操作符更改为
||
申请OR
. 中的值orElse
语句仅适用于列表为空的情况。hs1rzwqc2#
在java 8中,可以使用流:
在java 8之前,有Guava:
mwkjh3gx3#
在Java8+中,还可以使用
reduce
而不是allMatch
. 在我看来它更干净:boolean result = results.stream().reduce(Boolean::logicalAnd).orElse(false);
你可以替换logicalAnd
你需要的接线员。这个Boolean
类具有所有运算符。