for循环中使用remove(),报java.util.ConcurrentModificationException: null

发布时间:2024年01月15日

报错内容

报错代码如下:

   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://blog.csdn.net/liao3399084/article/details/135517231
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。