Как применить логический оператор ко всем элементам в Java

Мне нужно применить && (логический и) оператор для всех элементов в списке. Проблема в том, что в моем текущем решении мне нужно инициализировать rowResult переменная, и я думаю, что результат может стать недействительным из-за переменной, имеющей начальное значение.

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

2 ответа

Решение

Как уже отмечали Jon Skeet или CherryDT, вы можете инициализировать ваш rowResult с помощью true. Тогда ваш код может выглядеть так:

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

В случае, если вы хотите использовать операторOR - || начальное значение должно быть установлено на false и оператор для ||,


В Java 8 вы можете применить использование reduce метод для потоков:

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

Последнее имеет то преимущество, что вы можете применять любой логический оператор вместо &&,

В примере с Java 8 можно просто сменить оператор на || применять OR, Значение в orElse Заявление как раз для случая, когда список пуст.

В Java 8 вы можете использовать потоки:

boolean rowResult = results.stream().allMatch(b -> b);

До Java 8 была гуава:

boolean rowResult = Iterables.all(results, new Predicate<Boolean>() {
    @Override
    public boolean apply(Boolean input) {
        return input;
    }
});

В Java 8+ вы также можете использовать reduce вместо allMatch, На мой взгляд, это чище:

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

Вы можете заменить logicalAnd с оператором вам нужно. Boolean класс имеет все операторы.

Другие вопросы по тегам