Java 8中嵌套的forEach抛出异常[重复]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 8中嵌套的forEach抛出异常[重复]相关的知识,希望对你有一定的参考价值。
这个问题在这里已有答案:
编辑它的工作
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
答案
它就是这么说的。在循环中,您正在修改正在循环的数组,这在Java foreach循环中是不允许的。
我建议您在外部foreach循环中创建一个临时数组(用户循环用户)以获取权限,并从该数组中删除项目,而不是用户的权限数组。因此,你应该使用像user.removePrivilege(privilege);
这样的东西而不是temp.remove(privilege)
。
在内部循环之后,您可以清除用户的权限数组并在临时数组中添加项目。
以上是关于Java 8中嵌套的forEach抛出异常[重复]的主要内容,如果未能解决你的问题,请参考以下文章
嵌套的 foreach 循环使用 if 条件创建重复记录 - PHP Laravel 8
构造函数抛出异常嵌套异常是 java.lang.nullpointerexception
构造函数抛出异常;嵌套异常是 java.lang.NoSuchMethodError: org.springframework.util.AntPathMatcher.setCaseSensitive