代码之家  ›  专栏  ›  技术社区  ›  chaitanya gupta

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

  •  0
  • chaitanya gupta  · 技术社区  · 4 年前

    我有两张单子

    List<Car> cars
    List<Car> filteredCars
    

    在车里

    { 
     {
       "uuid":"1234",
       "name": "A"
     },
     {
       "uuid":"2222",
       "name": "B"
     }
    }
    

    在过滤车里

    { 
         {
           "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中,有没有一种有效的方法可以在不使用两个嵌套循环的情况下实现这一点?

    0 回复  |  直到 4 年前
        1
  •  2
  •   cfrick    4 年前

    根据你的列表对象/地图,你的方法只有在对象本身是可比较的(它们很可能不是)情况下才有效。因此,为快速查找而建立已知项的索引可能更容易。例如。

    def knownCarsIds = cars*.uuid.toSet()
    

    然后,仅在不知道此类id的情况下添加:

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