gpt4 book ai didi

java - 如果值为 null,则从 Java 流中过滤值

转载 作者:行者123 更新时间:2023-12-02 01:26:36 27 4
gpt4 key购买 nike

我试图从流中获取值(如果它们满足特定条件或某个值为空):

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;
}
}
...
}

这个想法是,如果 tasks 中已存在 updateTask,我将使用 updateTask 中的值更新 task > 数组,即它的 id 值存在于该数组中的对象上。如果 id 为 null(如果这是一个新任务,则为 null),那么我想创建一个新任务以添加到 tasks 数组中。问题是我的过滤函数正在过滤掉所有具有 null Id 的值,因此我永远无法将它们添加到 tasks 数组中。

这是过滤掉我上面描述的值的正确函数吗?:

t -> task.getId().equals(t.getId()) || t.getId() == null

最佳答案

根据@JBNizet所说,我认为你想要这样的东西:

for (ProjectTask task : tasks) {
Optional<TaskEnrollmentUpdateRequest> updateTaskOptional = updatedPhase.getTasks().stream()
.filter(t -> task.getId().equals(t.getId()) || t.getId() == null).findFirst();
if (updateTaskOptional.isPresent()) {
TaskEnrollmentUpdateRequest updateTask = updateTaskOptional.get();
if (updateTask.getId() != null) {
...
} else {
...
}
}
}

如果您的过滤器产生空列表,则 .findFirst() 将返回空 Optional,并调用 .get()它会抛出异常,因为它没有值。因此,您必须通过检查 .findFirst() 返回的 Optional 是否包含值来专门检查这种情况,而不是假设它总是包含值。

关于java - 如果值为 null,则从 Java 流中过滤值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56813322/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com