簡單點來說,在遍歷途中是不能使用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();//使用迭代器的刪除方法刪除 }
}