检查一个列表是否包含另一个列表中的元素

175
我有两个包含不同对象的列表。
List<Object1> list1;
List<Object2> list2;

我想检查list1中的元素是否基于特定属性存在于list2中(Object1和Object2有一个共同的名为attributeSame的属性,其中包括其他属性)。

目前,我是这样做的:

boolean found = false;
for(Object1 object1 : list1){
   for(Object2 object2: list2){
       if(object1.getAttributeSame() == object2.getAttributeSame()){
           found = true;
           //also do something
       }
    }
    if(!found){
        //do something
    }
    found = false;
}

但我认为有一种更好、更快的方法来做到这一点 :) 有人可以提出来吗?

谢谢!


首先,当你设置 found = true; 然后简单地 break; 或者退出循环。 - jsist
请尝试使用二分查找并更改数据结构以适应情况,以实现快速搜索。有关详细信息,请参见以下链接:https://dev59.com/5W435IYBdhLWcg3w1juV。 - jsist
除了 Object 以外,它们是否有共同的父类? - Woot4Moo
@Woot4Moo 不,他们不这样做。 - Ned
11个回答

0

使用Java 8,我们可以像以下这样检查一个列表是否包含另一个列表的任何元素

boolean var = lis1.stream().filter(element -> list2.contains(element)).findFirst().isPresent();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接