oldUsers只是allUsers的一个子集,所有oldUsers都在以下列表中处于活动状态.逻辑当前有效,但我在每次迭代allUsers只是为了得到oldUser的句柄,然后我将active标志设置为false.有没有办法拉出适当的记录并进行修改(oldUsers和allUsers的类型Set<User>)
for (User oldUser : oldUsers) {
for (User user : allUsers) {
if (user.getId().equals(oldUser.getId())) {
user.setActive(false);
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果oldUsers包含副本或新用户实例,并且您只想setActive(false)在那些allUsers具有匹配ID的用户上,那么我建议您根据用户ID覆盖User的.equals(和.hash)方法.然后你可以这样做:
Set<User> toInactivate = new HashSet<User>(allUsers);
toInactivate.retainAll(oldUsers);
for (User u : toInactivate)
u.setActive(false);
Run Code Online (Sandbox Code Playgroud)
另一种方式(可能更优雅)是Map<Integer, User>将用户ID映射到用户.你可以随便做
for (int id : oldUsers.keySet())
allUsers.get(id).setActive(false);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
72 次 |
| 最近记录: |