преобразование набора в карту заводной - PullRequest
3 голосов
/ 23 января 2012

У меня есть логика в моем постпроцессе для обработки значений устройств и файлов, как показано ниже: (изменил это, чтобы установить из карты, так как он переопределял значения)

def deviceFiles = devices.inject([] as Set) { deviceFiles, device ->
            def v = device.key.split( /\./ )[0]
            deviceFiles << [ (device.value), files[ v ] ]
        }

output: deviceFiles: [[Acer C6, Tetris.apk], [Motorola Droid Milestone, Tetris.apk], [Acer C6, TheSims3.apk], [HTC Desire, TheSims3.apk]] --- выглядит хорошо для отображения

Эти значения должны быть переданы как карта / свойства, чтобы данные отображались правильно без каких-либо исключений приведения, что я нахожу сложным ..

, когда они циклически повторяются через набор

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

вывод: отображение: [HTC Desire: TheSims3.apk, Motorola Droid Milestone: Tetris.apk, Acer C6: Tetris.apk] - что неверно (Acer C6: TheSims3.apk был переопределен)

Я что-то упускаю при отправке ожидаемых значений в карту?или невозможно отправить значения set через карту (так как карта всегда удаляет дубликаты, когда я перебираю устройства) ???

Ответы [ 2 ]

5 голосов
/ 23 января 2012

Вы можете использовать collectEntries :

def deviceFiles = devices.collectEntries {
    device -> [device.value, device.key.split(/\./)[0]]
}
2 голосов
/ 24 января 2012

Вы можете использовать groupBy для этого.Предполагая, что ваш набор состоит из:

def deviceFiles = [["Acer", "test.apk"], ["Acer", "abc.apk"], ["HTC", "qwer.apk"]]

def mapping = deviceFiles.groupBy { it[0] } 

Результатом будет:

["Acer": [["Acer", "test.apk"], ["Acer", "abc.apk"]], "HTC": [["HTC", "qwer.apk"]]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...