У меня есть map
со структурой, как показано ниже: -Преобразовать карту в нужную карту
def map = [107:[[107, "Module 01", 1], [107, "Module New", 6]], 109:[[109, "Module 04", 1]]]
У нас есть задача, чтобы представить это map
ниже структуры: -
Application | Module 01 | Module New | Module 04
107 | 1 | 6 | 0
109 | 0 | 0 | 1
Так что для этого представления, Я хочу фильтровать map
, как показано ниже: -
def outputMap = [moduleList:["Module 01", "Module New", "Module 04"], dataList:[[107:[1, 6, 0]], [109:[0, 0, 1]]]]
Таким образом, для достижения этой цели, я сделал, как показано ниже: -
def getFilteredMap(Map map) {
def moduleList = map.findResults {
it.value.findResults { it[1] }
}.flatten()
def dataList = []
map*.key.each { app ->
def tempMap = [:]
tempMap[app] = map.findResults {
it.value.findResults {
(it[0] == app) ? it[2] : 0
}
}.flatten()
dataList << tempMap
}
return ["moduleList" : moduleList, "dataList" : dataList]
}
def map = [107:[[107, "Module 01", 1], [107, "Module New", 6]], 109:[[109, "Module 04", 1]]]
def outputMap = [moduleList:["Module 01", "Module New", "Module 04"], dataList:[[107:[1, 6, 0]], [109:[0, 0, 1]]]]
assert outputMap == getFilteredMap(map)
Но как вы можете видеть getFilteredMap()
метод фильтрации карты в качестве выходного желания не очень хорошо.
Примечание: - Название модуля может быть повторено здесь, но я хочу, чтобы только уникальный список имен модулей обозначался как Set
.
Может ли кто-нибудь предложить лучший способ достичь этого?
' collect' все еще можно использовать здесь, чтобы удалить создание и добавление к 'tempMap' – RudolphEst
Да ваше решение выглядит намного чище ... :) –
Я очистил раздел' dataList' за каждое предложение ... Мне потребовалось некоторое время, чтобы увидеть двойную итерацию (то есть список карт). –