2016-04-30 78 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,你可以重新命名它以避免不必要的混淆。

相關問題