arraylist—如何将逻辑运算符应用于java中的所有元素

x8goxv8g  于 2021-07-03  发布在  Java
关注(0)|答案(3)|浏览(309)

我需要申请 && 对列表中的所有元素使用(逻辑and)运算符。问题是:在我当前的解决方案中,我需要初始化 rowResult 变量,我认为结果可能会变得无效,因为变量有一个初始值。

ArrayList<Boolean> results = new ArrayList<>();
for (i = 1; i < results.size(); i++) {
    rowResult = rowResult && results.get(i);
}
qvk1mo1f

qvk1mo1f1#

正如jonskeet或cherrydt所指出的,您可以用true初始化rowresult。那么你的代码可能看起来像:

boolean rowResult = true;
for (Boolean el: list) {
    rowResult = el && rowResult;
}

如果你想用运算符 OR - || 初始值应设置为 false 和操作员到 || .
在Java8中,您可以使用 reduce 流的方法:

List<Boolean> list = new ArrayList<>();
boolean rowResult = list.stream().reduce((a,b)-> a && b).orElse(true);

后者的优点是可以应用任何逻辑运算符而不是 && .
在Java8示例中,只需将操作符更改为 || 申请 OR . 中的值 orElse 语句仅适用于列表为空的情况。

hs1rzwqc

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;
    }
});
mwkjh3gx

mwkjh3gx3#

在Java8+中,还可以使用 reduce 而不是 allMatch . 在我看来它更干净: boolean result = results.stream().reduce(Boolean::logicalAnd).orElse(false); 你可以替换 logicalAnd 你需要的接线员。这个 Boolean 类具有所有运算符。

相关问题