【发布时间】:2019-11-10 18:59:10
【问题描述】:
如果值满足特定条件或某个值为空,我会尝试从流中获取值:
for (ProjectTask task : tasks) {
TaskEnrollmentUpdateRequest updateTask = updatedPhase.getTasks().stream()
.filter(t -> task.getId().equals(t.getId()) || t.getId() == null).findFirst().get();
if (updateTask != null) {
if (updateTask.getId() != null) {
mapper.map(updateTask, task);
} else {
TaskEnrollmentUpdateRequest ted = updateTask;
}
}
...
}
这个想法是,如果updateTask 已经存在于tasks 数组中,我将使用updateTask 中的值更新task,即它的id 值存在于该数组中的一个对象上。如果 id 为空,如果这是一个新任务,那么我想创建一个新任务以添加到 tasks 数组中。问题是我的过滤器函数正在过滤掉所有具有空 Id 的值,因此我永远无法将它们添加到 tasks 数组中。
这是过滤掉我上面描述的值的正确函数吗?:
t -> task.getId().equals(t.getId()) || t.getId() == null
【问题讨论】:
-
是的。但 updateTask 不可能为 null,因为 Optional.get() 永远不会返回 null。
-
updateTask和task.getId().equals(t.getId())不是比t.getId() == null更好吗?TaskEnrollmentUpdateRequest ted = updateTask;的目的是什么?该分配没有任何效果。通常,您应该重新考虑逻辑。您不希望循环执行另一个线性搜索,以匹配每个元素的 id……
标签: java java-stream