如何使用Stream API替换for循环中的if/else逻辑实现任务事件推送
实现方案
你可以根据实际需求选以下任意一种写法:
方案1:和你现有else分支写法统一,拆分两个Stream处理(风格更清晰)
你要的if分支(task.getUser()不为空)代码如下:
deletedTasks.stream() // 过滤出user不为空的任务 .filter(task -> !Objects.isNull(task.getUser())) .forEach(task -> kafkaSenderTaskProducer.sendAutoRejectedTasksEvent(task.getId(), task.getUser().getId()));
和你已经写好的else分支代码搭配,就可以覆盖原for循环的所有逻辑。
方案2:单Stream一次遍历完成所有逻辑(性能更优)
如果不想遍历两次deletedTasks集合,也可以直接在单个Stream的forEach中完成分支判断,和原for循环逻辑完全等价:
deletedTasks.stream() .forEach(task -> { if (!Objects.isNull(task.getUser())) { kafkaSenderTaskProducer.sendAutoRejectedTasksEvent(task.getId(), task.getUser().getId()); } else { kafkaSenderTaskProducer.sendDeletedEvent(task); } });
内容的提问来源于stack exchange,提问作者Олександр Житарюк
相关产品推荐
相关产品推荐

