Как применить логический оператор ко всем элементам в 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
класс имеет все операторы.