Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как проверить, что все элементы подходят под условие

Короткий ответ

allMatch() возвращает true, если условие выполняется для каждого элемента:

void main() {
    var ages = List.of(21, 34, 19);
 
    IO.println(ages.stream().allMatch(age -> age >= 18));
    IO.println(ages.stream().allMatch(age -> age >= 20));
}

Результат:

true
false

Хотя бы один и ни одного

anyMatch() проверяет, что подходит хотя бы один элемент, noneMatch() — что не подходит ни один:

void main() {
    var passwords = List.of("secret1", "qwerty", "Tr0ub4dor");
 
    IO.println(passwords.stream().anyMatch(p -> p.length() > 8));
    IO.println(passwords.stream().noneMatch(String::isBlank));
}

Результат:

true
true

Остановка на первом ответе

Эти методы прекращают проверку, как только ответ известен:

void main() {
    boolean result = Stream.of(1, 2, 3, 4)
            .peek(n -> IO.println("checking " + n))
            .allMatch(n -> n < 2);
    IO.println(result);
}

Результат:

checking 1
checking 2
false

Частая ошибка

Забыть про пустой список. allMatch() для пустого потока возвращает true, а anyMatch() — false:

void main() {
    List<Integer> empty = List.of();
 
    IO.println(empty.stream().allMatch(n -> n > 100));
    IO.println(empty.stream().anyMatch(n -> n > 100));
}

Результат:

true
false

Если пустой список должен давать false, проверьте !list.isEmpty() отдельно.

Функции из этого ответа

  • Stream.allMatch() — Проверяет, подходят ли под условие все элементы.
  • Stream.anyMatch() — Проверяет, подходит ли под условие хотя бы один элемент.
  • Stream.noneMatch() — Проверяет, что ни один элемент не подходит под условие.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.