简单点来说,在遍历途中是不能使用remove的
for (SysMenu menu : sysMenuList) { if (menu.getId() == 1){ sysMenuList.remove(menu); //这样使用是错误的 } }
上面的代码是错的,因为使用remove把其中的一个实体移除了,整个list就变了,正在遍历的list突然就少了一条,怎么会不报错呢?
这种问题就类似于:你要批量添加一些数据,先把它们装到一个list中,在list集合遍历途中去数据库查这些要添加
进去的数据,压根还没添加进去,怎么会查的到嘛.
要想做到上面代码理想中的操作,可以使用迭代器的remove,代码如下:
//遍历删除,除去一级子菜单 Iterator<SysMenu> iterator = sysMenuList.iterator(); while (iterator.hasNext()) { SysMenu menu = iterator.next(); if (menu.getParentId() != null && menu.getParentId() != 0) { iterator.remove();//使用迭代器的删除方法删除 }
}