我有2个列表,我正在迭代list1 ..如果list1中的当前项目存在于list2中,那么我需要对list1的属性进行更改。
列表只是对象列表:
list1 = [ObjectVO, ObjectVO]
list2 = ['w', 'x', 'y', 'z']
其中ObjectVO.getId()将返回一个字符串,例如'w',...'z'
我的代码如下:
Iterator it = list1.iterator();
while(it.hasNext()){
objVO = (ObjectVO) it.next();
if(list2.contains(objVO.getId()){
objVO.setFlag(true);
}
}
这里的问题是objVO.setFlag(true)总是被执行!像list2包含列表1中的所有项目,但事实并非如此,列表2只是list1的一个子集,所以它不应该为所有项目评估为真。
我该如何解决这个问题,还是有更好的方法来实现这个目标?
答案 0 :(得分:3)
为什么不迭代第二个列表?,
for(ObjectVO objVO : list2){
objVO.setFlag(list1.contains(objVO.getId()));
}
答案 1 :(得分:0)
您可以将第二个列表转换为相同的数据类型,以便它具有可比性,并使用Apache Commons集合来查找交集。只需将所有ObjectVO.getId()放入一个列表中即可。
Collection intersection = CollectionUtils.intersection(a, b);