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

如果你不相信努力和时光,那么成果就会是第一个选择辜负你的。不要去否定你自己的过去,也不要用你的过去牵扯你现在的努力和对未来的展望。不是因为拥有希望你才去努力,而是去努力了,你才有可能看到希望的光芒。for循环中使用remove(),报java.util.ConcurrentModificationException: null,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

报错内容

报错代码如下:

   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

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!