Groovy';s";在;具有字符串和GString元素的列表的运算符

Groovy';s";在;具有字符串和GString元素的列表的运算符,groovy,Groovy,下面的Groovy代码打印一个空列表: List<String> list = ["test-${1+2}", "test-${2+3}", "test-${3+4}"] List<String> subl = ["test-1", "test-2", "test-3"] println subl.findAll { it in list } 但是,此修改会产生正确的输出: List<String> list = ["test-${1+2}" as Stri

下面的Groovy代码打印一个空列表:

List<String> list = ["test-${1+2}", "test-${2+3}", "test-${3+4}"]
List<String> subl = ["test-1", "test-2", "test-3"]
println subl.findAll { it in list }
但是,此修改会产生正确的输出:

List<String> list = ["test-${1+2}" as String, "test-${2+3}" as String, "test-${3+4}" as String]
List<String> subl = ["test-1", "test-2", "test-3"]
println subl.findAll { it in list }
但是这个“解决方案”感觉非常笨拙。

实现这一点的正确Groovy方法是什么?

您可以使用
*。
扩展运算符轻松获取字符串(请参见下面的
列表2
示例)。但是通过
intersect
,您可以更轻松地在那里进行检查

List<String> list = ["test-${1+2}", "test-${2+3}", "test-${3+4}"]
List<String> subl = ["test-1", "test-2", "test-3"]
assert subl.findAll{ it in list }==[] // wrong

// use intersect for a shorter version, which uses equals
assert subl.intersect(list)==['test-3']

// or with sets...
assert subl.toSet().intersect(list.toSet())==['test-3'].toSet()

// spread to `toString()` on your search
List<String> list2 = ["test-${1+2}", "test-${2+3}", "test-${3+4}"]*.toString()
assert subl.findAll{ it in list2 }==['test-3']
List List=[“test-${1+2}”、“test-${2+3}”、“test-${3+4}]
列表subl=[“测试-1”、“测试-2”、“测试-3”]
assert subl.findAll{it in list}=[]错误
//对于较短的版本使用intersect,该版本使用equals
assert subl.intersect(列表)=['test-3']
//或者用布景。。。
assert subl.toSet().intersect(list.toSet())==['test-3'].toSet()
//搜索时传播到'toString()'
列表列表2=[“test-${1+2}”、“test-${2+3}”、“test-${3+4}”]*.toString()
assert subl.findAll{it in list2}=['test-3']
[test-3]
List<String> list = ["test-${1+2}", "test-${2+3}", "test-${3+4}"]
List<String> subl = ["test-1", "test-2", "test-3"]
assert subl.findAll{ it in list }==[] // wrong

// use intersect for a shorter version, which uses equals
assert subl.intersect(list)==['test-3']

// or with sets...
assert subl.toSet().intersect(list.toSet())==['test-3'].toSet()

// spread to `toString()` on your search
List<String> list2 = ["test-${1+2}", "test-${2+3}", "test-${3+4}"]*.toString()
assert subl.findAll{ it in list2 }==['test-3']