【发布时间】:2012-03-20 10:13:28
【问题描述】:
我有以下场景:
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);
}
有没有更好(更清洁)的方法来做到这一点?以上似乎有点容易出错,尤其是最后一次用户检查。
【问题讨论】: