фильтрация groovy Карта и удаление лишних ключей - PullRequest
0 голосов
/ 19 марта 2020

У меня есть Groovy карта Map<String, List<String>>. Мне нужно go через каждый список строк, удалить те, которые отвечают условию (например, длина> 3). Если все элементы удалены из списка, удалите ключ с карты.

Например,

{
"1" : ["1", "22,", "333", "4444"],
"2" : ["2", "2222"],
"4" : ["444444"]
}

становится

{
"1" : ["1", "22,", "333"],
"2" : ["2"],
}

Если есть какой-либо простой способ ввода, можно сделать это.

Ответы [ 2 ]

2 голосов
/ 19 марта 2020

Альтернатива ответу @ ou_ryperd, который не изменяет исходную карту:

def m = [
    "1" : ["1", "22", "333", "4444"],
    "2" : ["2", "2222"],
    "4" : ["444444"]
    ]

def newMap = m.collectEntries { k, v -> [k, v.findAll { it.length() < 4 }] }
 .findAll { k, v -> v.size() > 0 }
2 голосов
/ 19 марта 2020

Попробуйте это:

m = [
    "1" : ["1", "22,", "333", "4444"],
    "2" : ["2", "2222"],
    "4" : ["444444"]
    ]

m.each {String k, List v ->
    v.removeAll { it.length() > 3}
    if (m[k].isEmpty()) {
        m.remove(k)
    }
}

m.each { k, v -> println "${k} : ${v}"} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...