Несколько значений для одного и того же ключа на карте Groovy - PullRequest
0 голосов
/ 23 апреля 2020

Я новичок в кодировании и Groovy. У меня есть требование заполнять значения карты данных на основе значений в списке, но с критерием соответствия. Например, скажем, 2-й символ значения списка равен 2, затем сопоставьте его с ключом «Number2» на карте данных. Точно так же я могу получить несколько значений списка, соответствующих этому критерию. Я борюсь с приведенным ниже кодом - он работает, но он всегда фиксирует последнее вхождение соответствующего значения в списке. Насколько я понимаю, у вас может быть только одна уникальная пара ключ-значение на карте. Но есть ли другой способ достичь этого? Извините, я полная ладья ie здесь. Вся помощь приветствуется. Спасибо!

def map = [:]
def ent = ['123','133','124','143','125']

ent.each{
    println it.charAt(1)
}

ent.each{
    if(it.charAt(1) == '2'){
        println it.charAt(1)
        println "is in entity $it"
        map['Number2'] = it
        map.each{ k, v -> println "${k}:${v}" }
    }
}

Ожидаемый результат:

['Number2':[123,124,125],'Number3':[133],'Number4':[143]]

1 Ответ

3 голосов
/ 23 апреля 2020

Я, вероятно, получаю неправильный конец флешки, но вы имеете в виду:

def ent = ['123','133','124','143','125']

def map = ent.groupBy { "Number${it.charAt(1)}" }

Редактировать с шагом предварительной фильтрации

def ent = ['123','133','124','143','125']

def map = ent.findAll { it.charAt(1) in ['2', '3'] }
             .groupBy { "Number${it.charAt(1)}" }
...