list集合遍历删除指定元素

今天做项目中遇到一个需要删除 list中指定的元素的问题,通过网上的查询理解得以解决.

我创建了一个实体的list集合,查询的表假设为a

List<People> list = peopleMapper.findList();//findList为一个数据库查询集合方法

我现在查询到的是所有的数据,但是我所需要的数据的条件是: b表中存有a表数据的id的所有a表中的数据

所以现在需要将查询出的集合中不需要的数据剔除

首先,我采用的是foreach遍历删除:

for(People a : list){
   List<B> bList = b.getByAId(); //从b表中查询,条件为b表中存放a表id的字段与a表的id相同
   if(bList.size() == 0 || bList.isEmpty()){
      list.remove(a);
  }
}

写完之后,运行出错,网上查看了一下原因,是因为ArrayList中的remove方法最终都会调用fastRemove()方法,在fastRemove方法中,modCount变量的值会加一,但在ArrayList返回的迭代器会做迭代器内部的修改次数检查,因此报错

后来,采用Iterator遍历方法:

Iterator<people> it = findList.iterator();
while (it.hasNext()) {
      List<people> a= peopleMapper.getByAId(a.getId());
      if (a.size() == 0 || a.isEmpty()) {
          it.remove();
     }
  }

结果成功了,因为Iterator的remove() 方法会在删除当前迭代对象的同时维护索引的一致性。

但是采用iterator遍历遍历时间久,但是暂时没有想到其他方法解决.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值