← Назад к вопросам
Что такое 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)
Практические применения
- Валидация данных: проверка, что все поля объекта валидны
- Бизнес-логика: убедиться, что все условия выполнены перед операцией
- Фильтрация: проверка полного соответствия критериям
allMatch — это мощный инструмент для проверки условий в потоках, обеспечивающий эффективную обработку данных благодаря ленивому вычислению.