Java:仅通过一个属性在对象列表中搜索条目
我有以下清单Java:仅通过一个属性在对象列表中搜索条目,java,list,search,arraylist,Java,List,Search,Arraylist,我有以下清单 List<A> list= new ArrayList<>(); public class A{ private String name; private List<B> listB = new ArrayList<>(); } 为什么不使用Set而不是List,因为名称对于集合中的每个实例都应该是唯一的? 为了满足您的需要,您可以通过依赖name字段来覆盖A中的equals()和hashcode()方法。 通过这种方式,当您希望
List<A> list= new ArrayList<>();
public class A{
private String name;
private List<B> listB = new ArrayList<>(); }
为什么不使用Set
而不是List
,因为名称对于集合中的每个实例都应该是唯一的?
为了满足您的需要,您可以通过依赖name
字段来覆盖A
中的equals()
和hashcode()
方法。
通过这种方式,当您希望将具有特定标签的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());
如果结构适合您的需要,您也可以使用映射。带有值键的列表具有数据结构。您可以使用Map来利用javaseapi的优势,而不是使用数组列表
如果使用map,则可以使用此方法执行此操作。“集合是不能包含重复元素的集合。”有关详细信息,请参阅
publicstaticvoidadd(映射列表b){
for(字符串条目:listB.keySet()){
if(列表A.containsKey(条目)){
listA.get(entry).addAll(listB.get(entry));
}否则{
listA.put(条目,listB.get(条目));
}
}
}
注意:我使用Set删除重复的条目作为键的值。如果要保留副本,可以使用ArrayList()
。此外,Set不保留基于某些实现的顺序,条目的顺序可能会不时变化。我不清楚您的问题。试着对你的问题作一个简单的解释。知道A和B的关系会很好。
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());
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));
}
}
}