Конкретный пример использования функциональных интерфейсов из коробки
Моя вина. Мы не прошли, когда задавал вопрс, Stream-ы. Теперь я понял для чего. Вопрос удалять не буду((
Очень скудно по ним инфы. В 99% что они делают и как работают, и нигде ЗАЧЕМ они нужны.Помогите понять, пожалуйста. Дайте пример, конкретный
Predicate - проверяет некое условие. Для чего используется - тут я понял, например для фильтрации. Привильно ли понимаю, что в Stream Api, например я могу отфильтровать клиентов при помощи Predicate всех, у кого день рождения в декабре, чтобы их поздравить.
Consumer - принимает один параметр и ничего не возвращает. Для чего используется - понятия не имею Зачем?
Supplier - тут полный ноль, что и куда он там что-то поставляет
Function тоже самое. Ну зачем мне переделывать один элемент в другой? Если мне понадобится, почему я не могу написать, например такую конструкцию (Integer)int
Ответы (1 шт):
Достаточно открыть и прочитать ,документацию интерфейса Stream,чтобы найти там массу примеров применения указанных функциональных интерфейсов
Predicateиспользуется не только в промежуточной операцииStream::filter, но и в терминальных операциях:Stream::allMatch,Stream::anyMatch,Stream::noneMatchConsumerпрекрасно используется в терминальных операцияхStream::forEach/Stream::forEachOrdered, а также в промежуточной операцииStream::peek, которую следует использовать для отладки и вывода промежуточных значений стрима. Наиболее популярный пример -- ссылка на методSystem.out::printlnSupplierиспользуется вStream::generateи перегруженном методеStream::collect, где создается кастомный коллектор, а также массе коллекторов типаCollectors.groupingBy,Collectors.toMap/toConcurrentMap,Collectors.toCollection, чтобы создавать объекты-"приемники" данных стрима -- различные конкретные реализации мап и коллекций- Интерфейс
Functionи его разновидности используются для преобразования объектов в другой тип: вStream::map / flatMap,Collectors.groupingBy/toMap/toConcurrentMapдля преобразования элемента стрима в некий ключ или значение, в методахComparator.comparing/ thenComparingдля сравнения по полю/полям объекта, и т.д.