【发布时间】:2020-05-03 10:35:13
【问题描述】:
我将查询结果与列名一起放入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();
}
}
}
但不确定如何使用新密钥重新添加项目。
有什么建议吗?
【问题讨论】:
-
只是一个旁注:如果您要删除表别名,您可能会发生冲突!想象一下
tablename.id和tablename2.id的情况。如果您删除表名,您将用另一个 id 值覆盖一个 id 值,而最终不会意识到这一点。高度危险的恕我直言 -
或者简而言之:将结果放入新地图中。然后,您可以跳过从旧地图中删除密钥,然后继续使用新地图。
标签: java collections hashmap iterator concurrentmodification