#java #api #for-loop #lambda #stream
Вопрос:
У меня есть следующий код, и я хочу создать потоковый API для этого фрагмента:
for (Task task : deletedTasks) {
if (!Objects.isNull(task.getUser())) {
kafkaSenderTaskProducer.sendAutoRejectedTasksEvent(task.getId(), task.getUser().getId());
} else {
kafkaSenderTaskProducer.sendDeletedEvent(task);
}
}
Для второго условия у меня есть код, но я не знаю, как ввести код для первого условия
deletedTasks.stream()
.filter(task -> Objects.isNull(task.getUser()))
.forEach(kafkaSenderTaskProducer::sendDeletedEvent);
Можете ли вы дать мне несколько советов по созданию API потока для первого условия
Комментарии:
1.
.forEach(task -> if (...) { ... } else { ... })
. Здесь нет никаких преимуществ потоков.2. КСТАТИ:
Objects.isNull
на самом деле предназначен только для использования в качестве ссылки на метод (см. Примечание к API ). Используйтеtask.getUser() == null
вместо этого.
Ответ №1:
Здесь вам не нужно использовать поток или фильтр. Как простой forEach будет работать для вас. Ненужное использование потока в коде приведет к проблемам с производительностью. Вы можете сделать это, как показано ниже:
deletedTasks.forEach(task -> {
if(task.getUser() == null) {
kafkaSenderTaskProducer.sendDeletedEvent(task);
} else {
kafkaSenderTaskProducer.sendAutoRejectedTasksEvent(task.getId(), task.getUser().getId());
}
})