编辑 它的工作
group.getUsers().forEach(user -> {
user.removeGroup(group);
privilegeRepository.findAll().stream().
filter(privilege -> privilege.getName().startsWith(slugname.toUpperCase()))
.forEach(privilege -> {
user.removePrivilege(privilege);
privilegeRepository.delete(privilege);
});
});
我嵌套了for循环,我想用forEach替换该for循环:
for (User user : group.getUsers()) {
user.removeGroup(group);
for(Privilege privilege : user.getPrivileges()){
if (privilege.getName().startsWith(slugname.toUpperCase())){
user.removePrivilege(privilege);
privilegeRepository.delete(privilege);
}
}
}
到
group.getUsers().forEach(user -> {
user.removeGroup(group);
user.getPrivileges().stream().filter(privilege -> privilege.getName().startsWith(slugname.toUpperCase()))
.forEach(privilege -> {
user.removePrivilege(privilege);
privilegeRepository.delete(privilege);
});
});
它会引发异常:
java.util.ConcurrentModificationException
答案 0 :(得分:0)
这就是它的意思。在循环中,您正在修改要遍历的数组,这在Java foreach循环中是不允许的。
我建议您在外部foreach循环(在其中循环用户)中为特权创建一个临时数组,然后从该数组中删除项目,而不是从用户的特权数组中删除。因此,您应该使用user.removePrivilege(privilege);
之类的字词代替temp.remove(privilege)
。
在内循环之后,您可以清除用户的特权数组并将项目添加到临时数组中。