1

我有一个用户被分配到团队的场景。
不同的 ClientServices 分配给不同的团队,
我们需要以 RoundRobin 方式将这些团队中的用户分配给 clientservice
我试图按如下方式解决它以获取将映射团队名称和 ClientServiceInstance 列表的地图,以便我可以进行进一步处理在上面

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?
4

2 回答 2

2

我相信另一个版本是:

def teamMap = clientServicesList.inject( [:].withDefault { [] } ) { map, instance ->
  map[ instance.ownerTeam ] << instance
  map
}
于 2012-09-27T20:33:30.907 回答
1

new ArrayList().push(clientServiceInstance)return 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]
    }
}

尽管我确信有更好的方法来编写它。

于 2012-09-27T20:23:23.977 回答