Возможно ли каким-либо образом параметризовать Java 8 Consumer? Я хочу иметь многоразового Потребителя, где я могу добавить дополнительные аргументы, где я его использую.Дополнительный параметр функционального интерфейса Java 8 (потребитель)
List<DateTime> dates = new ArrayList<DateTime>();
Set<Alarm> alarms = new HashSet<Alarm>();
Consumer<Entry> entryConsumer1 = entry -> {
LocalTime time = entry.getDate().toLocalTime();
Alarm alarm = new Alarm(time, calendar1.getPattern());
alarms.add(alarm);
dates.add(entry.getDate());
};
Consumer<Entry> entryConsumer2 = entry -> {
LocalTime time = entry.getDate().toLocalTime();
Alarm alarm = new Alarm(time, calendar2.getPattern());
alarms.add(alarm);
dates.add(entry.getDate());
};
calendar1.generateEntries(criteria).forEach(entryConsumer1);
calendar2.generateEntries(criteria).forEach(entryConsumer2);
Calendar1, calendar2 тот же самый тип
Как вы можете видеть, как потребители отличаются только один аргумент. Можно ли упростить этот код/не дублировать?
При использовании' collect' лучше, Java не имеет хорошего способа создания двух результатов, т.е. 'alarms' и' date' из одного потока. –
@ Jesper В то время как «принципы функционального программирования» препятствуют зависимости от побочных эффектов, обратите внимание, что функциональный интерфейс «Потребитель» '_exists исключительно для цели моделирования побочных вычислений. Он ничего не возвращает - поэтому, если он представляет собой чистую функцию, абстракция будет бесполезной. (Это так, что методы потока, такие как 'forEach()', часто используются, когда 'collect()' или 'reduce()' может лучше выполнять работу, но если предположить, что выбор использовать «Потребитель» был прав, он делает нет смысла критиковать побочные эффекты, присущие внедрению «Потребителя».) –
@BrianGoetz благодарит за комментарий, я понимаю, я хотел упомянуть об этом, потому что я часто вижу, что люди без функционального программирования используют 'forEach' с побочными эффектами lambdas для всего, вместо того, чтобы думать «функциональный путь». – Jesper