2011-12-30 16 views
0

私は以下のように値を持つリストがあります:既存のリストを使用して新しいマップを作成

[「HTCマジック」:「Tetris.apk」、「モトローラドロイドマイルストーン」:「TheSims3.apk」、 を"Acer C6": "TheSims3.apk"];

私は

のように見えるマップ[:[HTCマジック]、TheSims3.apk [モトローラドロイドマイルストーン、エイサー C6] Tetris.apk]に、このリストに変換したい

+0

はあまりにマップその最初のものはありませんか? –

+0

ご返信が遅れて申し訳ありませんが、休日の後に仕事に戻ってきました...あなたの解決策をチェックし、すぐに更新します – Techie

答えて

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] 
関連する問題