как вернуть результат в hashmap ключ и значение в Groovy - PullRequest
0 голосов
/ 24 августа 2018

из хэш-карты "hash1", я не могу получить результат "hash2" в groovy:

hash1 = [a:['a1','b1','c1'],b:['a1','b1','c1','d1']]

hash2 = [a1:['a','b'],b1:['a','b'],c1:['a','b'],d1:['b']]

Не могли бы вы помочь?

Морис

Ответы [ 2 ]

0 голосов
/ 24 августа 2018

Обратите внимание, я добавил дубликат (a1) в одно из значений карты, чтобы продемонстрировать, как устранить дубликаты в случае их наличия. Если вы все еще хотите сохранить дубликаты, просто удалите .unique() из приведенного ниже подхода.

def map = [a:['a1','b1','c1','a1'],b:['a1','b1','c1','d1']]

map.inject([:].withDefault { [] }) { acc, key, val ->
  val.collect { (acc[it] << key).unique() }
  acc
}

// [a1:[a, b], b1:[a, b], c1:[a, b], d1:[b]]
0 голосов
/ 24 августа 2018

Вы можете собрать обратные кортежи этой первой карты.Затем либо сгруппируйте их по первому элементу и соберите списки, либо просто уменьшите.Например:

def hash1 = [a:['a1','b1','c1'],b:['a1','b1','c1','d1']]

println(
    hash1.collectMany{ k, vs -> 
        vs.collect{ [it, k] } 
    }.inject([:].withDefault{[]}){ m, t -> 
        m[t[0]] << t[1]; m
    }
)
// => [a1:[a, b], b1:[a, b], c1:[a, b], d1:[b]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...