Удалить записи карты на основе коллекции значений - как это сделать Groovy? - PullRequest
1 голос
/ 15 марта 2019

Есть ли способ Groovy для удаления элементов из a, которые соответствуют значениям в b?

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

expected output : [1:"aa", 3:"cc"]

В настоящее время я использую 2 вложенных цикла для решения этой проблемы.Мне интересно, есть ли у Groovy лучший способ сделать это?

1 Ответ

2 голосов
/ 15 марта 2019

Для Groovy <<code>2.5.0

Для этого можно использовать один Map.findAll() метод:

a.findAll { k,v -> !(v in b) }

Однако имейте в виду, что этот метод не изменяет существующую карту a, а создает новую. Поэтому, если вы хотите изменить карту, хранящуюся в переменной a, вам придется переназначить ее.

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}
...