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-методов и функциональной композиции.