迭代列表映射字符串对象和编辑键时并发修改异常
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());
}
}
我将 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());
}
}