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

检查groovy中的一个列表是否包含来自另一个列表的元素,groovy,Groovy,我有两张单子 List<Car> cars List<Car> filteredCars 在过滤车里 { { "uuid":"1234", "name": "A" }, { "uuid":"3333", "name": "C"

我有两张单子

List<Car> cars
List<Car> filteredCars
在过滤车里

{ 
     {
       "uuid":"1234",
       "name": "A"
     },
     {
       "uuid":"3333",
       "name": "C"
     }
}
现在我想在cars中添加filteredCars,然后car应该只包含那个些对象(A,B,C)

我正在尝试使用groovy闭包实现这一点

filteredCars.each {
                if (!cars.contains(it)) {
                    cars.add(it)
                }
      }
但通过使用它,它添加了重复的对象
在groovy中实现这一点而不使用两个嵌套循环的任何有效方法?

取决于您的列表对象/映射,只有当对象本身是可比较的(它们很可能不是)时,您的方法才会起作用。所以,为快速查找而建立已知项的索引可能更容易。例如

def knownCarsIds = cars*.uuid.toSet()
然后,仅在此类id未知时添加:

...
if (!knownCarIds.contains(it.uuid)
...

根据您在那里列出的对象/贴图,只有当对象本身是可比较的(它们很可能不是)时,您的方法才会起作用。所以,为快速查找而建立已知项的索引可能更容易。例如

def knownCarsIds = cars*.uuid.toSet()
然后,仅在此类id未知时添加:

...
if (!knownCarIds.contains(it.uuid)
...

def knownCars=cars*.name.toSet()
那么
如果(!knownCars.contains(it)…
我可以在uuid上应用它吗,因为uuid对于汽车来说是唯一的,但是名称可以复制?你试过了吗?它也
…包含(it.name)…
以上感谢它可以工作
def knownCars=cars*.name.toSet()
那么
如果(!knownCars.contains(it).
我可以将此应用于uuid吗,因为uuid对于汽车来说是唯一的,但名称可以重复。您尝试过吗?此外,它是
…contains(it.name).
以上感谢它的工作