gpt4 book ai didi

java - 如何创建重复列表项的列表?

转载 作者:行者123 更新时间:2023-11-29 05:51:30 27 4
gpt4 key购买 nike

我有一个这种格式的对象列表:

class myObj {

private String identifier;

public myObj(String identifier){
this.identifier = identifier;
}

}

List<myObj> allobjects = new ArrayList<myObj>();
allobjects.add(new myObj("123"));
allobjects.add(new myObj("123"));
allobjects.add(new myObj("123"));
allobjects.add(new myObj("123"));
allobjects.add(new myObj("1234"));
allobjects.add(new myObj("12345"));
allobjects.add(new myObj("12"));
allobjects.add(new myObj("12"));

将重复对象提取到单独列表中的优雅方法是什么?因此,在上面的示例中,返回了一个包含两个列表的新列表。第一个列表包含:

new myObj("123");
new myObj("123");
new myObj("123");
new myObj("123");

第二个列表包含:

new myObj("12");
new myObj("12");

一个可能的解决方案是创建一个新对象:

List<List<myObj>> newList = new ArrayList<List<myObj>>

然后对于列表中的每个元素,'allobjects' 遍历每个元素,并将多次包含的每个元素添加到列表中。然后在当前元素的迭代结束将新创建的列表添加到“newList”

这是可以接受的还是有其他解决方案?

最佳答案

将 equals 和 hashCode 方法添加到 myObj 类,以便您可以将它们用作 Map 键:

class myObj {

private String identifier;

public myObj(String identifier){
this.identifier = identifier;
}

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

public boolean equals(Object o){
return identifier.equals(((myObj)o).identifier);
}
}

然后声明一个Map:

Map<myObj, List<myObj>> map = new HashMap<myObj, List<MyObj>>()

并遍历原始列表。使用 myObjs 作为映射键,每次检索对应于该 myObj 的列表。如果您是第一次遇到某个 myObj,请不要忘记创建列表:

for(myObj obj : allobjects){
List<myObj> list = map.get(obj);
if(list == null){
list = new ArrayList<myObj>();
map.put(obj, list);
}
list.add(obj);
}

关于java - 如何创建重复列表项的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13724917/

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