今天做项目中遇到一个需要删除 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遍历遍历时间久,但是暂时没有想到其他方法解决.