如何在java中从一个列表中查找另一个列表中的项目
我有两个列表,我正在迭代列表1。。如果列表1中的当前项存在于列表2中,那么我需要更改列表1的属性 这些列表只是对象列表:如何在java中从一个列表中查找另一个列表中的项目,java,list,iteration,Java,List,Iteration,我有两个列表,我正在迭代列表1。。如果列表1中的当前项存在于列表2中,那么我需要更改列表1的属性 这些列表只是对象列表: list1 = [ObjectVO, ObjectVO] list2 = ['w', 'x', 'y', 'z'] 其中ObjectVO.getId()将返回一个字符串,如“w”、…“z” 我的代码如下: Iterator it = list1.iterator(); while(it.hasNext()){ objVO = (ObjectVO) it.next()
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)总是被执行!与列表2包含列表1中的所有项目一样,列表2也不是真的,列表2只是列表1的一个子集,所以它不应该对所有项目都求值为真
我该如何解决这个问题,或者有更好的方法来解决这个问题?为什么不迭代第二个列表
for(ObjectVO objVO : list2){
objVO.setFlag(list1.contains(objVO.getId()));
}
为什么不迭代第二个列表呢
for(ObjectVO objVO : list2){
objVO.setFlag(list1.contains(objVO.getId()));
}
您可以将第二个列表转换为相同的数据类型,使其具有可比性,并使用ApacheCommons集合来查找交集。只需将所有ObjectVO.getId()放入一个列表中
Collection intersection = CollectionUtils.intersection(a, b);
您可以将第二个列表转换为相同的数据类型,使其具有可比性,并使用ApacheCommons集合来查找交集。只需将所有ObjectVO.getId()放入一个列表中
Collection intersection = CollectionUtils.intersection(a, b);
你能在objVO类中发布equals方法吗?这个对象没有equals方法,我试图比较两个字符串。从objVO.getId()和list2(strings的列表)中得到的一个可以在objVO类中发布equals方法吗?对于该对象没有equals方法,我尝试比较两个字符串。从objVO.getId()和list2(字符串列表)中得到的一个为什么要使用第三方库来完成这么简单的任务?我的意思是你的项目中通常会包含番石榴和apache commons中的一些东西,代码更干净。我有这个库,我不介意再次使用它,我必须迭代一个列表,使它们成为对象,然后执行该调用,然后再次迭代以将属性的值设置为false。。。太麻烦了,但知道这个函数很好为什么要使用第三方库来完成这么简单的任务?我的意思是,你的项目中通常会包含番石榴和apache commons中的一些东西,而且代码更干净。我确实有这个库,我不介意使用它,但再次,我必须遍历一个列表,使它们成为对象,然后执行该调用,然后再次迭代以将属性值设置为false。。。太麻烦了,但是知道这个函数很好我已经有了一个循环迭代列表1,所以如果在第一次迭代中可以完成,那么添加第二次迭代对我来说并不好。。。如果别无选择,我想我不得不这么做,但是。。。为什么list2总是说它包含所有代码,而实际上它们不包含这些代码呢?另外,为了指出列表名称被交换了,我已经更正了它们,所以这就是我正在做的事情,遍历对象列表并查看list1是否有itI,我已经有一个循环在迭代list1,因此如果在第一次迭代中可以完成,那么添加第二次迭代对我来说并不好。。。如果别无选择,我想我不得不这么做,但是。。。为什么list2总是说它包含所有的代码,而实际上它们不包含这些代码呢?另外,为了指出列表名是互换的,我已经更正了它们,所以这就是我正在做的,遍历对象列表,看看list1是否包含这些代码