我有以下情形:表信息聚合
class Task {
int id;
Group group;
User user;
boolean successful;
}
用戶是組的一部分,並且組的用戶的關係是許多一對多(用戶可以屬於多個組和一組可以包含多個用戶)。任務特定於組中的用戶。
有一個List<Task>
我需要總結每個用戶在一個組中的成功任務數併發送更新給用戶。所以,如果一個用戶屬於幾個組,我需要爲他的每個組更新一次,他屬於(對於該組用戶具有的成功任務的數量)。
實現該目標的最佳方法是什麼?我們目前的算法是:
First, sort the list by Group ID and then by User ID.
Then:
int successfulTasks = 0;
Group curGroup = null;
User curUser = null;
for(Task task : tasksByGroupAndUser) {
if((task.getGroup() != curGroup) || (task.getUser() != curUser) {
// Going to next user or group, update the previous user
updateUser(user,group, successfulTasks);
successfulTasks = 0;
}
if(task.isSuccessful()) {
successfulTasks++;
}
}
// Handle last user
if(curUser != null) {
updateUser(user,group, successfulTasks);
}
有沒有更好的方法來做到這一點?以上看起來有點容易出錯,尤其是最後一次用戶檢查。
謝謝,我會朝這個方向太多,但你的代碼是更好的。速度在這裏不是什麼問題,但我也認爲這個解決方案更清晰,更易於理解。 – Alex 2012-03-20 20:25:08