2012-09-27 41 views
1

我有一个用户分配给团队的场景。
不同ClientServices被分配到不同的团队和
我们需要指定用户这些球队的轮转方式
我试图如下得到一个地图,队名和ClientServiceInstance的名单将被映射到解决它clientservice所以我可以做它进一步处理grails:将域类分配给另一个域类

def teamMap = [:] 
clientServicesList.each {clientServiceInstance-> 
      if(teamMap[clientServiceInstance.ownerTeam] == null){ 
       teamMap.putAt(clientServiceInstance.ownerTeam, new ArrayList().push(clientServiceInstance)) 
      }else{ 
       def tmpList = teamMap[clientServiceInstance.ownerTeam] 
       tmpList.push(clientServiceInstance) 
       teamMap[clientServiceInstance.ownerTeam] = tmpList 
      } 
     }  

but instead of pushing clientServiceInstance it pushes true. 

Any idea? 

回答

1

new ArrayList().push(clientServiceInstance)回报true,这意味着你把那到你teamMap什么,而不是我想应该是一个列表?相反,你可能想

teamMap.putAt(clientServiceInstance.ownerTeam, [clientServiceInstance]) 

顺便问一下,你的代码是不是很Groovy的;)

你可以把它改写为类似

def teamMap = [:] 
clientServicesList.each { clientServiceInstance -> 
    if (teamMap[clientServiceInstance.ownerTeam]) { 
     teamMap[clientServiceInstance.ownerTeam] << clientServiceInstance 
    } else { 
     teamMap[clientServiceInstance.ownerTeam] = [clientServiceInstance] 
    } 
} 

虽然我敢肯定有更好的写这些的方法。

2

我相信另一个版本是:

def teamMap = clientServicesList.inject([:].withDefault { [] }) { map, instance -> 
    map[ instance.ownerTeam ] << instance 
    map 
} 
+0

我就知道你有什么聪明;) – doelleri