检查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).
以上感谢它的工作