Конкретный пример использования функциональных интерфейсов из коробки

Моя вина. Мы не прошли, когда задавал вопрс, Stream-ы. Теперь я понял для чего. Вопрос удалять не буду((

Очень скудно по ним инфы. В 99% что они делают и как работают, и нигде ЗАЧЕМ они нужны.Помогите понять, пожалуйста. Дайте пример, конкретный

Predicate - проверяет некое условие. Для чего используется - тут я понял, например для фильтрации. Привильно ли понимаю, что в Stream Api, например я могу отфильтровать клиентов при помощи Predicate всех, у кого день рождения в декабре, чтобы их поздравить.

Consumer - принимает один параметр и ничего не возвращает. Для чего используется - понятия не имею Зачем?

Supplier - тут полный ноль, что и куда он там что-то поставляет

Function тоже самое. Ну зачем мне переделывать один элемент в другой? Если мне понадобится, почему я не могу написать, например такую конструкцию (Integer)int


Ответы (1 шт):

Автор решения: Nowhere Man

Достаточно открыть и прочитать ,документацию интерфейса Stream,чтобы найти там массу примеров применения указанных функциональных интерфейсов

  • Predicate используется не только в промежуточной операции Stream::filter, но и в терминальных операциях: Stream::allMatch, Stream::anyMatch, Stream::noneMatch
  • Consumer прекрасно используется в терминальных операциях Stream::forEach / Stream::forEachOrdered, а также в промежуточной операции Stream::peek, которую следует использовать для отладки и вывода промежуточных значений стрима. Наиболее популярный пример -- ссылка на метод System.out::println
  • Supplier используется в Stream::generate и перегруженном методе Stream::collect, где создается кастомный коллектор, а также массе коллекторов типа Collectors.groupingBy, Collectors.toMap/toConcurrentMap, Collectors.toCollection, чтобы создавать объекты-"приемники" данных стрима -- различные конкретные реализации мап и коллекций
  • Интерфейс Function и его разновидности используются для преобразования объектов в другой тип: в Stream::map / flatMap, Collectors.groupingBy/toMap/toConcurrentMap для преобразования элемента стрима в некий ключ или значение, в методах Comparator.comparing/ thenComparing для сравнения по полю/полям объекта, и т.д.
→ Ссылка