groovy:使用所有字符串创建值列表

时间:2016-04-30 01:02:07

标签: list dictionary groovy

我正在尝试遍历地图并创建新的地图值。以下是输入

def map = [[name: 'hello', email: ['on', 'off'] ], [ name: 'bye', email: ['abc', 'xyz']]]

我希望结果数据如下:

[hello: ['on', 'off'], bye: ['abc', 'xyz']]

我现在的代码 -

result = [:]
map.each { key ->
  result[random] = key.email.each {random ->
            "$random"
        }   
    }
return result

上面的代码返回

[hello: [on, off], bye: [abc, xyz]]

正如您从上面所看到的,来自onoffabcxyz的引用已经消失,这在我尝试时会给我带来问题检查列表值[on, off]

3 个答案:

答案 0 :(得分:1)

没关系。如果您在Groovy控制台中看到结果,它们仍然是String

下面应该足够了:

map.collectEntries {
    [ it.name, it.email ]
}

如果您仍需要单引号来创建GString而不是String,则需要进行以下调整:

map.collectEntries {
    [ it.name, it.email.collect { "'$it'" } ]
}

我个人认为后面的做法背后没有任何理由。顺便说一句,map不是Map,而是List,您可以重命名它以避免不必要的混淆。

答案 1 :(得分:0)

您可以将其转换为json对象,然后所有内容都会有引号

答案 2 :(得分:0)

这样做。应该/可能有一种更加时髦的方式。

def listOfMaps = [[name: 'hello', email: ['on', 'off'] ], [ name: 'bye', email: ['abc', 'xyz']]]
def result = [:]
listOfMaps.each { map ->  
   def list = map.collect { k, v ->
      v
   }
  result[list[0]] = ["'${list[1][0]}'", "'${list[1][1]}'"]
}
println result