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

2022-08-31 07:21:16

我有两个列表,其中包含不同的对象。

List<Object1> list1;
List<Object2> list2;

我想根据特定属性(Object1和Object2具有(以及其他)一个相互属性(类型为Long),名为restinsAme)检查list1中的元素是否存在于list2中。

现在,我这样做是这样的:

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;
}

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

谢谢!


答案 1

如果您只需要测试基本相等性,则可以使用基本JDK完成此操作,而无需修改一行中的输入列表

!Collections.disjoint(list1, list2);

如果需要测试特定属性,则更难。默认情况下,我会推荐,

list1.stream()
   .map(Object1::getProperty)
   .anyMatch(
     list2.stream()
       .map(Object2::getProperty)
       .collect(toSet())
       ::contains)

...它收集 中的不同值,并测试 每个值是否存在。list2list1


答案 2

为了缩短纳伦德拉的逻辑,你可以使用这个:

boolean var = lis1.stream().anyMatch(element -> list2.contains(element));