2017-07-18 50 views
0

可以說我有地圖Map<String, List<Integer>>在groovy中變換地圖的值

我想通過對嵌套列表的每對鍵和元素應用convert()方法將此地圖轉換爲Map<String, Map<Integer, Object>>

Object convert(String key, Integer value) 

我該如何做到這一點?

我想是這樣的:

map.collect { key, list -> 
    key: list.collectEntries { 
     [(element): convert(key, element)] 
    } 
} 

,但我發現ClassCastException: ArrayList cannot be cast to Map

回答

3

完全沒有一臺電腦,但嘗試

map.collectEntries { key, list -> 
    [key, list.collectEntries { element -> 
     [element, convert(key, element)] 
    }] 
} 
+0

幾乎電腦:)它不作爲就是工作 - '鍵'和'element'是視爲字符串文字。但是它在括號括起來之後起作用:'(key)'和'(element)'。你能更新答案嗎? –

+0

他們不應該......這是'collectEntries'的列表形式,而不是地圖形式 –

+0

如果您將它們用作地圖中的鍵,那麼它們必須包裹它們,但我不是,我只是使用它們作爲返回列表中的第一個元素 –

0

你可以把它簡化一點:

def convert = { it -> it + 1 }; 
Map<String, List<Integer>> map = [foo: [1, 2, 3], bar: [4, 5, 6]]; 
map.collectEntries { k, v -> [(k): v.collect { convert(it) }] }