设备:[1.1:Acer C6,2:Acer C6,1:Acer C6,2.2:HTC Magic] files:[2:Tetris.apk,1:TheSims3.apk]
我有一个文件和devies的映射,截至目前它的一对多映射。
设备:[1.1:Acer C6,2:Acer C6,1:Acer C6,2.2:HTC Magic] files:[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]
答案 0 :(得分:1)
您正在使用设备名称作为密钥累积结果。将新值添加到地图时,它会使用相同的键覆盖最后一个值。
您可以尝试累积到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