是否有一种Groovy方式从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是否有更好的方法?
答案 0 :(得分:2)
2.5.0
您可以使用单个Map.findAll()
方法来做到这一点:
a.findAll { k,v -> !(v in b) }
但是,请记住,此方法不会修改现有的a
映射,但会创建一个新的映射。因此,如果您要修改存储在a
变量中的地图,则必须重新分配它。
a = a.findAll { k,v -> !(v in b) }
2.5.0
Groovy 2.5.x版为Map
-removeAll
引入了一个新的默认方法,该方法采用一个谓词,并根据该谓词从输入映射中删除元素。
a.removeAll { k,v -> v in b}