Создайте правильный потоковый API с помощью java

#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());
    }
})