[英]many to many mapping in Grails
設備:[1.1:Acer C6,2:Acer C6,1:Acer C6,2.2:HTC Magic]文件:[2:Tetris.apk,1:TheSims3.apk]
我有一個文件和設備映射,到目前為止,它是一對多映射。
設備:[1.1:Acer C6,2:Acer C6,1:Acer C6,2.2:HTC Magic]文件:[2:Tetris.apk,1:TheSims3.apk]
現在我需要實現多對多映射
我的一對多映射邏輯是
mapping = params.devices.inject( [:] ) { map, dev ->
// Get the first part of the version (up to the first dot)
def v = dev.key.split( /\./ )[ 0 ]
logger.debug("value of v :"+v)
map << [ (dev.value): files[ v ] ]
}
當前輸出是-映射:[Acer C6:Tetris.apk,HTC Magic:Tetris.apk]
預期的輸出:[Acer C6:Tetris.apk,Acer C6:TheSims3.apk,HTC Magic:Tetris.apk]
您正在使用設備名稱作為鍵來累積結果。 將新值添加到地圖后,它將使用相同的鍵覆蓋最后一個值。
您可以嘗試累積到Set中而不是映射中。 例:
def devices = ['1.1': 'Acer C6', '2': 'Acer C6', '1': 'Acer C6', '2.2': 'HTC Magic']
def files = ['2': 'Tetris.apk', '1': 'TheSims3.apk']
def deviceFiles = devices.inject([] as Set) { deviceFiles, device ->
def v = device.key.split( /\./ )[0]
deviceFiles << [ (device.value), files[ v ] ]
}
assert deviceFiles == [
['Acer C6', 'Tetris.apk'],
['Acer C6', 'TheSims3.apk'],
['HTC Magic', 'Tetris.apk']
] as Set
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.