报错内容
报错代码如下:
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()
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/202832.html