我有以下列表
List<A> list= new ArrayList<>();
public class A{
private String name;
private List<B> listB = new ArrayList<>(); }
我现在想要在列表中搜索一个条目,我只能通过它来识别它的名字。背景是,我得到一个A的对象,我想在listB
中添加。为了使它更好,我想搜索A中是否已经有一个带有此名称的条目,然后添加给那里方法的条目:
文字示例:
list:
name1
entry11
etnry12
entry13
name2
entry21
entry22
Now I want to Add the following listB to listA
name1
entry14
entry15
Behaviour now:
list:
name1
entry11
etnry12
entry13
name2
entry21
entry22
name1
entry14
entry15
Desired bahaviour:
list:
name1
entry11
etnry12
entry13
entry14
entry15
name2
entry21
entry22
答案 0 :(得分:0)
为什么不使用Set<A>
代替List<A>
作为name
对于集合中的每个A实例都应该是唯一的?
为了满足您的需求,您可以依靠equals()
字段覆盖hashcode()
中的A
和name
方法。
通过这种方式,当您要将具有特定标签的A
列表中的元素添加到具有相同特定标签的A
列表中时,您可以创建A
具有预期名称的对象,并从两个列表中检索它。
以下是示例代码:
String name = "nameFromObjectWhereIWantToAddElements";
A aToSearch = new A(name);
A targetA = listTarget.get(listTarget.indexOf(aToSearch));
A originaA = listOrigin.get(listOrigin.indexOf(aToSearch));
targetA.addElements(originaA.getElements());
如果结构符合您的需要,您也可以使用地图。
答案 1 :(得分:0)
包含值键的列表具有数据结构Map。您可以使用Map来获取JavaSE API的优势,而不是使用数组列表。
如果您使用地图,则可以使用此方法执行此操作。 &#34; Set是一个不能包含重复元素的Collection。&#34;有关详细信息,请参阅here。
public static void add(Map<String, HashSet<String>> listB) {
for (String entry : listB.keySet()) {
if (listA.containsKey(entry)) {
listA.get(entry).addAll(listB.get(entry));
} else {
listA.put(entry, listB.get(entry));
}
}
}
注意:我使用Set删除重复的条目作为键的值。如果您想保留重复内容,可以使用ArrayList<>()
。此外,Set不会保留订单,并且条目的顺序可能会不时变化。