Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:仅通过一个属性在对象列表中搜索条目_Java_List_Search_Arraylist - Fatal编程技术网

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));
        }
    }
}