迭代列表映射字符串对象和编辑键时并发修改异常

concurrent modification exception while iterating list map string object and edit key

我将 List<Map<String, Object>> 查询结果和列名称一起放入。有时列名类似于 TableAlias.ColumnName,在这种情况下我想将其更改为 ColumnName 并删除 TableAlias. 因为我有以下代码:

queryResult = namedParameterJdbcTemplateHive.queryForList(query, paramSource);

for (Map<String, Object> map : queryResult) {
    for (Map.Entry<String, Object> entry : map.entrySet()) {            
        String[] keyData = entry.getKey().split("\.");
        if (keyData.length > 0) {
            Object obj = map.remove(entry.getKey());
            map.put(keyData[1], obj);
        }                   
    }
}

这给了我 concurrent modification exception 所以我尝试使用如下迭代器:

for (Map<String, Object> map : queryResult) {
    for(Iterator<Map.Entry<String, Object>> it = map.entrySet().iterator(); it.hasNext(); ) {
        Map.Entry<String, Object> entry = it.next();
        String[] keyData = entry.getKey().split("\.");
        if (keyData.length > 0) {
            it.remove();                        
        }
    }
}

但不确定如何使用新密钥将项目添加回来。

有什么建议吗?

我会遍历原始地图并用更新的键填充另一个地图。

queryResult = namedParameterJdbcTemplateHive.queryForList(query, paramSource);

Map<String, Object> newMap = new HashMap<>();
for (Map.Entry<String, Object> entry : map.entrySet()) {
   String[] keyData = entry.getKey().split("\.");
   if (keyData.length > 1) {
       newMap.put(keyData[1], entry.getValue());
   } else {
       newMap.put(entry.getKey(), entry.getValue());
   }
}