基于值集合删除映射项-如何以Groovy方式执行?

基于值集合删除映射项-如何以Groovy方式执行?,groovy,collections,Groovy,Collections,是否有一种常规方法可以从a中删除与b中的值匹配的元素 def a = [1:"aa", 2:"bb", 3:"cc", 4:"dd"] def b = [ "bb", "dd"] expected output : [1:"aa", 3:"cc"] 我目前正在使用2个嵌套for循环来解决这个问题。我想知道Groovy是否有更好的实现方法?对于Groovy=2.5.0 Groovy 2.5.x版为Map-removeAll引入了一个新的默认方法,该方法接受一个谓词并基于该谓词从输入映射中删除元

是否有一种常规方法可以从
a
中删除与
b
中的值匹配的元素

def a = [1:"aa", 2:"bb", 3:"cc", 4:"dd"]
def b = [ "bb", "dd"]

expected output : [1:"aa", 3:"cc"]
我目前正在使用2个嵌套for循环来解决这个问题。我想知道Groovy是否有更好的实现方法?

对于Groovy<
2.5.0
您可以使用单个
Map.findAll()
方法来执行此操作:

a.findAll { k,v -> !(v in b) }
但是,请记住,此方法不会修改现有的
映射,而是创建一个新映射。因此,如果要修改存储在
变量中的map,则必须重新分配它

a = a.findAll { k,v -> !(v in b) }
对于Groovy>=
2.5.0
Groovy 2.5.x版为
Map
-
removeAll
引入了一个新的默认方法,该方法接受一个谓词并基于该谓词从输入映射中删除元素

a.removeAll { k,v -> v in b}

@manish,或者如果您想修改
a
,您可以使用
a.removeAll{k,v->v in b}
@DmitryKhamitov
Map.removeAll
是在Groovy 2.5.0中添加的,因此它取决于所使用的Groovy版本。