如何对列表中的元素子集进行修改

use*_*108 3 java

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)

aio*_*obe 5

如果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)