【问题标题】:Groovy: comparing items from 2 different lists having different formatGroovy:比较来自具有不同格式的 2 个不同列表的项目
【发布时间】:2021-10-28 03:08:38
【问题描述】:

我有一个清单

def a = [kitkat lollypop orea android-11]

另一个列表

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

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

需要注意的一点是 list 项目由空格分隔且没有引号,而 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) 

但是由于列表元素之间有空格,这引发了异常

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

【问题讨论】:

    标签: arraylist groovy compare jenkins-groovy


    【解决方案1】:

    在示例 1 和示例 2 中您几乎完成了,但存在一些问题。

    我会假设:

    def a = [kitkat lollypop orea android-11]
    

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

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

    使用'a'中的字符串,取两个括号之间的所有内容。从那里,用空格字符分割字符串以获得项目列表。然后,使用这个新的项目列表,我们将逐个遍历列表 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多