2012-01-23 8 views
3

をセットに変換します: deviceFiles:[[Acer C6、Tetris.apk]、[Motorola Droidマイルストーン、Tetris.apk]、[Acer C6、TheSims3.apk]、[HTC Desire、TheSims3.apk]] ...表示されるように見えるは、私は以下のようなデバイスやファイルの値を処理するために、私の後処理の私のロジックを持っているマップにグルーヴィー

これらの値は、マップ/プロパティとして渡されるため、データがキャスト例外なしで正しく表示されるため、厳しいと感じています。

が設定

deviceFiles.each { device -> 
      mapping.put("${device}", "${file}") 
     } 

出力を介してループされる:マッピング:[HTC欲望:TheSims3.apk、モトローラドロイドマイルストーン:Tetris.apk、エイサーC6:Tetris.apk] - 正しくありません( Acer C6:TheSims3.apkがオーバーライドされました)

ここに期待値をマップに送信していますか?またはmapを介してsetの値を送信することはできません(マップは常にデバイスを反復処理しているときに重複を排除します)???

答えて

5

あなたはcollectEntriesを使用することができます:あなたはこのためgroupByを使用することができます

def deviceFiles = devices.collectEntries { 
    device -> [device.value, device.key.split(/\./)[0]] 
} 
+0

私のグルーヴィーなバージョンがcollectEntriesをサポートしていないので、私は – Techie

+0

.collect注入実施している{}} .collectEntries {と同じように動作するはずです:

def deviceFiles = [["Acer", "test.apk"], ["Acer", "abc.apk"], ["HTC", "qwer.apk"]] def mapping = deviceFiles.groupBy { it[0] } 

することになります –

+0

@JarredOlson、collect {}は働いていましたが、私の要求はここでは成し遂げられません。なぜなら、オブジェクトarraylistをプロパティにキャストすることはできないからです... ... – Techie

2

。あなたのセットがで構成さと仮定:

["Acer": [["Acer", "test.apk"], ["Acer", "abc.apk"]], "HTC": [["HTC", "qwer.apk"]]] 
+0

応答に感謝しますが、私の意図した出力は上記のようなものではありません。必要です。再度、感謝します – Techie

関連する問題