Что такое Predicate в Java?

«Что такое Predicate в Java?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Predicate<T> — это функциональный интерфейс в Java (пакет java.util.function), который представляет собой булеву функцию одного аргумента. Он используется для проверки условия и возвращает true или false.

Основной метод:

boolean test(T t)

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

import java.util.function.Predicate;

Predicate<String> isEmpty = String::isEmpty;
Predicate<String> isLong = s -> s.length() > 10;

System.out.println(isEmpty.test("")); // true
System.out.println(isLong.test("Hello World")); // true

Комбинация предикатов (default-методы):

Predicate<String> isLongAndNotEmpty = isLong.and(isEmpty.negate());
System.out.println(isLongAndNotEmpty.test("Hello")); // false (не длинный)
System.out.println(isLongAndNotEmpty.test("Hello World!")); // true

Практическое применение в Stream API:

import java.util.List;
import java.util.Arrays;

List<String> names = Arrays.asList("Anna", "Bob", "Alexander", "Kate");
Predicate<String> startsWithA = s -> s.startsWith("A");
Predicate<String> isShort = s -> s.length() <= 3;

// Фильтрация: имена, начинающиеся на 'A' ИЛИ короткие (<=3 символа)
names.stream()
     .filter(startsWithA.or(isShort))
     .forEach(System.out::println); // Вывод: Anna, Bob, Alexander

Зачем это нужно? Predicate инкапсулирует условие в объект, что позволяет легко передавать, комбинировать и повторно использовать логику проверок, особенно в API для фильтрации коллекций и потоков данных.