Groovy:比较来自 2 个具有不同格式的不同列表的项目

Groovy: comparing items from 2 different lists having different format

我有一个清单

def a = [kitkat lollypop orea android-11]

另一个列表

def b = ["kitkat", "lollypop", "honeycomb", "nougat", "android-11"]

我需要在列表 a 中执行一些任务,如果它们存在于列表 b 中,如果它们不存在于列表 b 中,则执行其他操作。

需要注意的一件事是 list a 项目由 space 分隔且没有引号,而 list be 由逗号分隔并且项目在引号内;由于这个原因,我在下面尝试过的东西没有用。

我试过以下方法: 1)

a.split(" ").each{
    def itema = it
    b.split(",").each{
        if(b.contains(itema){
            //do something
        }
    }
    //do something else
)
a.split(" ").each{
    if(b.split(",").contains(it){
        //do something
    }
    //do something else
}
for(itema in a){
    for(itemb in b){
        if(itema == itemb){
            //do something
        }
    }
    //do something else
}
a.intersect(b) 

但是由于列表元素之间有 spaces 而抛出异常

我想我想要的是从列表 a 创建一个新列表,方法是将其更改为用逗号分隔的项目和引号,然后可以使用上述解决方案之一 还是有更好的方法来实现 groovy 我想要的?

您几乎完成了示例 1 和 2,但还有一些问题。

我假设是这样的:

def a = [kitkat lollypop orea android-11]

实际上是一个字符串,具体取决于您尝试拆分它的方式。在我的解决方案中,我假设是这样的:

def a = "[kitkat lollypop orea android-11]"

使用'a'中的字符串,获取两个括号之间的所有内容。从那里,用 space 字符拆分字符串以获得项目列表。然后,使用这个新的项目列表,我们将一个接一个地遍历列表 b 以查看是否有任何匹配项:

def items = a.takeBetween("[", "]")
items.split(/\s/).each {
   if (it in b) {
      println "I'm in list b - $it"
   } else {
      println "I'm not in list b - $it"
   }
}

这将导致:

I'm in list b - kitkat
I'm in list b - lollypop
I'm not in list b - orea
I'm in list b - android-11