Map<Integer, Map<String, String>> Actions = new HashMap<Integer, Map<String, String>>();
Map<Integer, List<ActionName>> actionList = Service.getAvailableActionsById(order.id, user.id)
for(Map.Entry<Integer, List<ActionName>> entry : actionList)
{
Map<String, String> actionMap = new HashMap<String, String>();
for(ActionName actionName: entry.getValue()){
actionMap.put(actionName.name(), actionName.name());
}
Actions.put(entry.getKey(), actionMap);
}
- == //对于上面相同的功能,我想使用map inject,同时执行如下操作无法将所有列表值注入地图
Map<Integer, List<ActionName>> actionList = [:]
if ( order.id) actionList = Service.getAvailableActionsById(order.id, session.user.id)
Map Actions = actionList.inject( [:] ) { map, id, values -> map.put( id, values ); return map; }
- =====
答案 0 :(得分:2)
Map availableActions = actionList.inject( [:] ) { map, key, listValue ->
map << [ (key) : listValue.collectEntries { [ it.name(), it.name() ] } ]
}
这应该给你想要的东西,但我没有得到这样做的理由。
答案 1 :(得分:0)
inject
的闭包需要参数:result和current元素。如果您想在地图上致电inject()
,则应将每个元素视为Map.Entry
:
actionList.inject( [:] ) { map, elem ->
map[ elem.key ] = elem.value // key -> id, value -> values
map
}