2016-04-30 79 views
-2

我试图遍历一个地图并创建一个新的地图值。以下是输入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]]

正如你可以从上面看到,从onoffabc引号,xyz已经消失,这是造成我的问题,当我试图做的列表中值检查[on, off]

+0

我不知道上面的代码是如何工作的!也许你没有粘贴整个事情。我在下面添加了一个工作。 – mohsenmadi

回答

0

你可以将其转换为JSON对象,然后一切都会有报价

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 
+0

或者,您可以用'def list = map.collect {(it.value)}替换'list'对象' – mohsenmadi

1

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

下面应该足够了:

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

如果您仍需要单引号创建GString而不是String,那么下面就需要的调整:

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

我个人不看到后面做的任何推理。顺便说一下,map不是Map,它是List,你可以重新命名它以避免不必要的混淆。

相关问题