← Назад к вопросам

Что такое allMatch?

1.0 Junior🔥 141 комментариев
#Stream API и функциональное программирование

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

allMatch в Java Streams API

allMatch — это терминальная операция в Stream API, которая проверяет, удовлетворяют ли ВСЕ элементы потока заданному условию (предикату). Метод возвращает boolean: true, если все элементы соответствуют условию, и false в противном случае.

Сигнатура метода

boolean allMatch(Predicate<? super T> predicate)

Predicate — это функциональный интерфейс, который принимает элемент и возвращает true или false.

Основные характеристики

  • Ленивое вычисление: метод прекращает обработку, как только встречает элемент, который не соответствует условию (short-circuit evaluation)
  • Терминальная операция: завершает цепочку операций и возвращает результат
  • Потокобезопасность: при использовании параллельных потоков требует внимания к побочным эффектам

Примеры использования

Пример 1: Проверка диапазона чисел

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
boolean allPositive = numbers.stream().allMatch(n -> n > 0);
System.out.println(allPositive); // true

boolean allGreaterThanThree = numbers.stream().allMatch(n -> n > 3);
System.out.println(allGreaterThanThree); // false

Пример 2: Проверка строк

List<String> words = Arrays.asList("hello", "world", "java");
boolean allLowerCase = words.stream().allMatch(s -> s.equals(s.toLowerCase()));
System.out.println(allLowerCase); // true

boolean allLongerThanFive = words.stream().allMatch(s -> s.length() > 5);
System.out.println(allLongerThanFive); // false ("java" короче 5)

Пример 3: Проверка объектов

class User {
    private String name;
    private int age;
    
    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    public int getAge() { return age; }
}

List<User> users = Arrays.asList(
    new User("Alice", 25),
    new User("Bob", 30),
    new User("Charlie", 22)
);

boolean allAdults = users.stream().allMatch(u -> u.getAge() >= 18);
System.out.println(allAdults); // true

Производительность и оптимизация

Метод allMatch использует принцип short-circuit evaluation, что означает:

List<Integer> largeList = IntStream.range(1, 1_000_000).boxed().collect(Collectors.toList());

// Проверка завершится на втором элементе (не пройдет все элементы)
boolean result = largeList.stream().allMatch(n -> n > 5);
// Обработано: 2 элемента из 1,000,000

Это значительно повышает производительность при работе с большими коллекциями.

Сравнение с другими операциями

  • anyMatch() — возвращает true, если ХОТЯ БЫ ОДИН элемент соответствует условию
  • noneMatch() — возвращает true, если НИ ОДИН элемент не соответствует условию
  • allMatch() — возвращает true, если ВСЕ элементы соответствуют условию
List<Integer> nums = Arrays.asList(1, 2, 3, 4, 5);

boolean any = nums.stream().anyMatch(n -> n > 4);   // true (5 > 4)
boolean none = nums.stream().noneMatch(n -> n > 10); // true (нет элементов > 10)
boolean all = nums.stream().allMatch(n -> n > 0);    // true (все > 0)

Практические применения

  1. Валидация данных: проверка, что все поля объекта валидны
  2. Бизнес-логика: убедиться, что все условия выполнены перед операцией
  3. Фильтрация: проверка полного соответствия критериям

allMatch — это мощный инструмент для проверки условий в потоках, обеспечивающий эффективную обработку данных благодаря ленивому вычислению.

Что такое allMatch? | PrepBro