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

报错内容

报错代码如下:

   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循环中使用remove(),报java.util.ConcurrentModificationException: null_第1张图片

报错原因

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()

你可能感兴趣的:(日常异常信息处理,java,开发语言,spring)