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
我有一个清单
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