Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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 - Fatal编程技术网

Java 如何将列表转换为唯一列表?

Java 如何将列表转换为唯一列表?,java,list,Java,List,我有两个类,ParentClass和ChildClass,我在jTable上显示了这些数据: Child Class Parent Class Child Class 1 Parent Class A Child Class 2 Parent Class A Child Class 3 Parent Class B Child Class 4 Parent Class A Child Class 3 Parent Class B ...

我有两个类,ParentClass和ChildClass,我在jTable上显示了这些数据:

Child Class       Parent Class
Child Class 1     Parent Class A
Child Class 2     Parent Class A
Child Class 3     Parent Class B
Child Class 4     Parent Class A
Child Class 3     Parent Class B
...               ... 
从这个子类视图中,我试图获取所有父类,并将其放入一个唯一的列表/集合中,因为我将为此创建一个摘要,即父类a有这个子类的总数,我这样做:

List<ParentClass> parents = new ArrayList<ParentClass>();
...
for(ChildClass child : childs){
    ParentClassDaoImpl parentClassDaoImpl = new ParentClassDaoImpl();
    ParentClass parent = parentClassDaoImpl.findParent(child.getParentId());
    if(parents.isEmpty()){
        parents.add(parent);
    }else{
        if(parents.indexOf(parent) == -1){//I have to check if this parent is already on my lists
            parents.add(parent);
        }
    }
}
...

顺便说一句,我使用的是1.6Java版本。

每当你得到父类的新对象时,这就是为什么当你检查该对象是否存在于列表中时,总是说不存在,因为它与对象的引用相比较


要维护对象的唯一列表,可以使用“过度评估Equals”方法,也可以只使用“Map”然后使用“get Map.values”方法。

如果不使用列表,您可以管理一个映射

映射的键是父类,值是其子类的集合

因此,您将迭代所有子项,对于每个子项,您只需调用map.getparent.addchild之类的内容; 显然,在此之前,您将确保如果映射尚未包含该父对象,则使用空集初始化其子对象集:

如果map.ContainesKeyParent{ map.putparent,新HashSet; } 最后,您可以在地图上迭代,并为每个键显示每个值集的大小


列表不关心唯一性。您可以正确地实现equals&hashcode,并使用集合而不是列表。只需正确地实现hashcode和equals,然后使用集合我们需要查看您的父类,但我怀疑您没有实现equals或至少没有正确地实现equals,在实现equals时,您不应该忘记hashcode。此外,如果你想拥有一个独特的集合,那么就使用集合。如果您想收集其他信息,例如子对象的数量,则映射可能更好。您应该使用Set parents=new HashSet;而不是列表父项=新建ArrayList;共享父类结构我可以试试你的解决方案,我认为这可以缩短我获取子类总数的过程。非常感谢你!我试过你的建议,但我注意到了一些事情。这并不是我所有的孩子都上的课。例如,如果在我的实际数据中,在运行我的程序时父类A下有5个子类**只打印了4个**.@AnirudhLou没有示例代码很难回答。当您创建空哈希集时,可能忘记添加第一个子项??不管怎样,用跑步答案编辑你的帖子对其他人来说都是件好事!forChildClass child:childs{ParentClassDaoImpl ParentClassDaoImpl=new ParentClassDaoImpl;ParentClass parent=ParentClassDaoImpl.findParentchild.getParentId;if!map.containsKeyparent{map.putparent,new HashSet;}else{map.getparent.addchild;}for map.条目:map.entrySet{System.out.printlnentry.getKey+\n+entry.getValue+Total+entry.getValue.size;}您的解决方案比我的好,因为我的解决方案有两个for循环。一个用于父类,一个用于子类。只是它不能接受所有子类。
...
if (!parents.contains(parent)) {
    parents.add(parent);
}
...