上代码
for (Map<String,Object> user:userList){
for(TSBrOrderDetailRepairmanVO repairmanVO:repairmanVOList){
if(user.get("id").toString().equals(repairmanVO.getUId())){
userList.remove(user);
}
}
}
这里的 userList的长度是2,但循环的话只循环了一次
在Java中,当你在循环一个列表的同时又对该列表进行修改时,就会抛出一个ConcurrentModificationException异常。这是因为在遍历列表时,迭代器记录了列表中元素的数量和状态,并且期望在列表的生命周期内保持一致性。如果你在遍历列表的同时修改了它,那么迭代器就会失效并抛出异常。
在你的代码中,你在遍历userList时,又尝试移除其中的元素。这就导致了迭代器失效并抛出异常,但是由于你没有在代码中捕获该异常,因此程序终止了。因此,如果你想要安全地从列表中删除元素,你应该使用一个Iterator来遍历列表,并调用Iterator的remove()方法来删除元素,而不是直接在列表上进行修改。修改后的代码可以像这样:
Iterator<Map<String, Object>> iterator = userList.iterator();
while(iterator.hasNext()){
Map<String, Object> user = iterator.next();
for(TSBrOrderDetailRepairmanVO repairmanVO:repairmanVOList){
if(user.get("id").toString().equals(repairmanVO.getUId())){
iterator.remove();
break; // 退出循环,因为已经找到匹配的元素
}
}
}