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

时间:2016-05-10 14:05:06

标签: java arraylist operators

我需要将&&(逻辑和)运算符应用于列表中的所有元素。问题是:在我目前的解决方案中,我需要初始化rowResult变量,我认为由于变量具有初始值,结果可能会变得无效。

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

3 个答案:

答案 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示例中,可以将运算符更改为例如||以应用ORorElse语句中的值仅适用于list为空的情况。

答案 2 :(得分:1)

在Java 8+中,您也可以使用reduce代替allMatch。我认为它更干净:

boolean result = results.stream().reduce(Boolean::logicalAnd).orElse(false);

您可以将logicalAnd替换为所需的运算符。 Boolean类具有所有运算符。