gpt4 book ai didi

java - 通过 ArrayList 扫描具有相同字段的对象

转载 作者:行者123 更新时间:2023-12-01 16:55:24 26 4
gpt4 key购买 nike

我有一个简单的类创建者:

public class Creator {

private String name;

public Creator(String name) {
this.name = name;
}

public String getName() {
return name;
}

}

我正在扫描 XML 文档以创建更多 Creator 对象,这些对象将添加到 ArrayList 中。

但是,如果我的 ArrayList 中已经存在具有相同“名称”字段的现有 Creator,我不希望添加新的 Creator。下面是我的尝试,但是最好的方法是什么?

ArrayList<Creator> creators = new ArrayList<>();
String text; // name from XML input

boolean makeCreator = true;
for(Creator creator : creators) {
if(creator.getName().equals(text)) {
makeCreator = false;
}
}
if(makeCreator == true) {
creators.add(new Creator(text));
}

最佳答案

一种方法是使用集合实现(例如 HashSet),它不允许重复。

这需要在数据类中实现 equals 和 hashcode 方法

public class Creator {

private String name;

public Creator(String name) {
this.name = name;
}

public String getName() {
return name;
}

public int hashCode() {
return name.hashCode();
}

public boolean equals(Object other) {
if (!(other instanceof Creator)) {
return false;
}
return Objects.equals(((Creater)other).name, name);
}

}请注意,您可能希望更好地实现这两种方法。

问题是 - 您已有的 creators 集合是什么?您迭代它然后创建一个新列表?

所以答案可能是

Set<Creator> uniqeCreators = new HashSet<>(creators);

哦,是的,if(makeCreateor == true) 是多余的,if (makeCreator) 就足够了

关于java - 通过 ArrayList 扫描具有相同字段的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33616685/

26 4 0