1

ユーザーがチームに割り当てられるシナリオがあります。
さまざまな ClientServices がさまざまなチームに割り当てられており、
これらのチームのユーザーをラウンドロビン方式で 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)を返します。つまり、リストであると想定しているものの代わりに、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 に答える