gpt4 book ai didi

java - 如果 Person 存在则更新 Set,如果不存在则添加它们

转载 作者:搜寻专家 更新时间:2023-11-01 02:19:22 29 4
gpt4 key购买 nike

假设我有一个非常简单的类 Person,其中包含姓名和地址:

public class Person {
String name;
String address;

public Person(final String name,
final String address) {
this.name = name;
this.address = address;
}

public String getName() {
return name;
}

public void setName(final String newName) {
this.name = newName;
}

public String address() {
return address;
}

public void setAddress(final String newAddress) {
this.address = newAddress;
}
}

我现在有一个包含所有已知 Person 对象的集合,我想仅根据姓名更新其中一个人的地址。为此,我有以下内容:

persons.stream()
.filter(person -> personToUpdate.getName().equalsIgnoreCase(person.getName()))
.forEach(person -> {
person.setAddress(personToUpdate.getAddress());
});

但是,我的问题是当我有一个完全不在 Set 中的新人时。我如何检查集合以查看此人是否存在,如果存在,请更新他们的地址。但如果它们不存在,请将它们添加到列表中。我知道这很简单,但无论出于何种原因,我现在都无法想到如何实现这一目标。我不想继续创建包含所有名称的列表、比较新名称、它们是否在列表中等等。我宁愿让它尽可能简洁。

编辑:名称将是唯一的!

最佳答案

除非您需要单行代码,否则您可以简单地利用 Optional 的优势:

Optional<Person> person = persons.stream()
.filter(p -> personToUpdate.getName().equalsIgnoreCase(p.getName()))
.findFirst();

if (person.isPresent()) {
person.get().setAddress(personToUpdate.getAddress());
} else {
persons.add(personToUpdate);
}

如果您使用的是 Java 9+,这看起来会更好:

persons.stream()
.filter(p -> personToUpdate.getName().equalsIgnoreCase(p.getName()))
.findFirst()
.ifPresentOrElse(
p -> p.setAddress(personToUpdate.getAddress()),
() -> persons.add(personToUpdate)
);

这当然假设名称是唯一的(正如您希望更新一个条目)。

关于java - 如果 Person 存在则更新 Set<Person>,如果不存在则添加它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52974325/

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