我有以下情形:表信息聚合
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