繁体   English   中英

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

[英]How to transform a list into a unique list?

所以我有这两个类ParentClassChildClass,并且有这些数据(显示在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
...               ... 

从这个ChildClass视图中,我试图获取所有父类并将其放入Unique List / Set中 ,因为我会通过说Parent Class 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);
        }
    }
}
...

我的问题是我总是得到重复的清单。 我尝试了这个,但是我得到了相同的输出:

...
if (!parents.contains(parent)) {
    parents.add(parent);
}
...

顺便说一句,我正在使用1.6 Java版本。

每次获取ParentClass的新对象时,为什么每次检查列表中是否存在该对象时,总会说该对象不存在,因为它与该对象的引用进行了比较。

为了维护对象的唯一列表,可以重写equels()方法,或者只使用Map<ParentClass Id, ParentClass object>然后再获取map.values()方法。

除了列表之外,您还可以管理Map<ParentClass, Set<ChildClass>>

地图的键将是父类,而值将是其子级的集合。

因此,您将遍历所有子项,对于每个子项,您只需调用诸如map.get(parent).add(child);类的东西map.get(parent).add(child); 显然,在此之前,您将确保如果地图还不包含该父级,则可以使用空集初始化其子级集:

if (!map.containsKey(parent)) {
   map.put(parent, new HashSet());
}

最后,您可以遍历地图,并显示每个键的每个值集的大小...

HTH!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM