所以我有这两个类 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
... ...
从这个 ChildClass视图,我试图获取所有父类并将其放入唯一列表/集合,因为我会通过说< strong> 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版本。
答案 0 :(得分:2)
每次获得ParentClass的新对象时,为什么每次检查列表中是否存在该对象时,总会说该对象不存在,因为它与该对象的引用进行了比较。
用于维护对象的唯一列表,这些对象可以是覆盖equels()
的方法,也可以只使用Map<ParentClass Id, ParentClass object>
然后获取map.values()
的方法。
答案 1 :(得分:2)
您可以管理Map<ParentClass, Set<ChildClass>>
而不是列表?
地图的键将是父类,而值将是其子级的集合。
因此,您将遍历所有子项,对于每个子项,您只需调用类似map.get(parent).add(child);
的名称
显然,在此之前,您将确保如果地图还不包含该父级,则可以使用空集初始化其子级集:
if (!map.containsKey(parent)) {
map.put(parent, new HashSet());
}
最后,您可以遍历地图,并显示每个键的每个值集的大小...
HTH!