groovy removeAll闭包不删除列表中的元素

时间:2014-07-25 09:31:20

标签: groovy

我不确定groovy中的removeAll是如何工作的,但我希望这会返回[40289454470ea94601470ea977d00018]

def list = ['40289454470ea94601470ea977b20014', '40289454470ea94601470ea977d00018']
def list2 = ['40289454470ea94601470ea977b20014']

list.removeAll {
   list2
}

println list

但它会返回[]

请指教:(

2 个答案:

答案 0 :(得分:8)

带有Closure的

removeAll删除了闭包为

返回true的每个元素

list2在groovy真理下强制执行,因为它不是空的所以你的代码会删除所有内容

尝试

list1 -= list2

答案 1 :(得分:1)

不应使用removeAll闭包,而应使用removeAll方法。

list.removeAll {
   list2
}

关闭的方式:

list.removeAll {
   list2.contains(it)
}

如果list2包含此元素,则会将其从list

中删除