繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM