groovy与其他地图注入地图

时间:2014-09-15 19:37:11

标签: groovy inject

    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;  }

- =====

2 个答案:

答案 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
}