Gymterview
junior

Для чего нужны функциональные интерфейсы Predicate, DoublePredicate, IntPredicate и LongPredicate?

Predicate<T> — функциональный интерфейс для проверки условия. Метод test(T t) принимает объект и возвращает boolean. Предикаты повсеместно используются в Stream API для фильтрации, а также в Collection.removeIf(), Optional.filter() и других методах.

Пример
Predicate<String> nonEmpty = s -> s.length() > 0;
nonEmpty.test("foo");          // true
nonEmpty.negate().test("foo"); // false

default-методы and(), or() и negate() позволяют комбинировать предикаты в сложные условия без написания громоздких лямбд.

Примитивные специализации:

Интерфейс Тип аргумента
Predicate<T> T
DoublePredicate double
IntPredicate int
LongPredicate long

На собеседовании: полезно показать комбинирование предикатов: predicate1.and(predicate2).or(predicate3). Это демонстрирует знание default-методов и функциональной композиции.