代码如下:
for (int i = 0; i < organDtos.size(); i++) {
if(organDtos.get(i)!=null && organDtos.get(i).getParentId()!=0){
**organDtos.remove(i);**
}
}
用这个办法会遇到以下坑:
我数据库中有符合条件的三条数据,顺序依次是:id为4,5,6
第一次循环:i=0,此时id=5的数据符合条件,从list中移除此元素。
需要注意的点是:此时list的元素位置发生了变化,id为5本来这条在i=1的位置的数据,因为i=0的位置上没有了数据,它自动跑到了i=0的位置,后面的数据也依次跟着往前排了。
第二次循环:i=1,此时在i=1的位置的数据是i=6这条数据,符合条件,所以这条数据也从list中移除了。
此时就发现:id=5这条数据因为自动往前移被跳过了,所以即使符合条件,因为没循环到这条数据,也从list中移除不了了。
所以替代方法是:
用迭代器:
for (int i = 0; i < organDtos.size(); i++) {
// 获取迭代器
Iterator<OrganDto> it = organDtos.iterator();
while(it.hasNext()){
OrganDto str = it.next();
if(str!= null && str.getParentId() != 0){
it.remove();
}
}
}
参考博文地址如下:
https://blog.csdn.net/zhaozuhao110/article/details/88116831