Ответ
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 для фильтрации коллекций и потоков данных.