2014-10-29 56 views
4

下面的Groovy代碼塊打印一個空列表:Groovy的「中」經營者與字符串和GString的元素列表

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 } 

輸出:

[test-3] 

但是這個「解決方案」感覺非常笨重。
什麼是正確的Groovy方式來實現這一目標?

回答

3

您可以使用*.傳播運算符輕鬆獲取字符串(請參見下面的list2示例)。但是您的支票可以通過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'] 
+1

正是我需要的,非常感謝。 – Matthias 2014-10-29 15:27:09

相關問題