报错代码如下:
for (Map<String, Object> relatedMap : relatedAll) {
Long userId = Long.valueOf(relatedMap.get("userId").toString());
for (Long planUserId : planUserIds) {
if (userId.equals(planUserId)) {
relatedAll.remove(relatedMap);
}
}
}
报错截图如下:
for循环遍历移除list元素时,list内部结构也在发生变化,但是for循环不会因为list元素减少而减少循环次数,所以当刚好循环到移除的元素时,就会报错
使用迭代器方式,代码如下:
Iterator<Map<String, Object>> iterator = relatedAll.iterator();
while (iterator.hasNext()){
Map<String, Object> relatedMap = iterator.next();
Long userId = Long.valueOf(relatedMap.get("userId").toString());
if (planUserIds.contains(userId)) {
iterator.remove();
}
}
当我们嵌套多层for循环时,可以将其中一个对象集合转成一个主键集合(如上述例子中的planUserIds),然后用contains去进行判重,然后再去remove()