2011-12-30 34 views
0

我有如下值的列表:与现有列表创建新地图

[ “HTC Magic的”: “Tetris.apk”, “摩托罗拉Droid里程碑”: “TheSims3.apk”, “Acer C6”:“TheSims3.apk”];

我想这个列表转换成地图,它看起来像

[Tetris.apk:HTC魔术],TheSims3.apk:摩托罗拉Droid里程碑,宏碁 C6]

+0

这不是第一件事情的地图吗? – 2011-12-30 17:44:00

+0

对于迟到的回复感到抱歉,假期后回来工作...将检查您的解决方案,并会尽快更新,谢谢你的回应 – Techie 2012-01-03 10:15:29

回答

1
mapIn = ["HTC Magic":"Tetris.apk", "Motorola Droid Milestone":"TheSims3.apk", "Acer C6":"TheSims3.apk"] 
mapOut = [:].withDefault { [] } 
mapIn.each { k, v -> mapOut[v] << k } 
mapOut 
> [Tetris.apk:[HTC Magic], TheSims3.apk:[Motorola Droid Milestone, Acer C6]] 

如果你不介意的格局虐待,你可以使用inject

mapOut = mapIn.inject([:].withDefault {[]}) { m, k, v -> m[v] << k; m } 
> [Tetris.apk:[HTC Magic], TheSims3.apk:[Motorola Droid Milestone, Acer C6]] 

如果你不介意的话,你怎么弄的价值观了,你可以使用groupEntriesBy

mapOut = mapIn.groupBy { it.value } 
mapOut["TheSims3.apk"]*.key 
> [Motorola Droid Milestone, Acer C6]