你可以试试这个:
public void replaceKeysChar(char originalChar, char newChar, Map<String, ?> map) {
Map<String, Object> tempMap = new HashMap<String, Object>();
for (Map.Entry<String, ?> entry : map.entrySet()) {
String key = entry.getKey();
if(key != null){
key = key.replace(originalChar, newChar);
}
tempMap.put(key, entry.getValue());
}
map.clear();
map.putAll(tempMap);
}
这样您只处理 char,而不会更改实现。
另外,当您迭代时,您不会在地图中添加项目(这将是一个坏主意)。
如果您不关心实现,只需返回 tempMap 并删除 clear/putAll 部分(它会消耗更少的资源)。
编辑:
在@locka 的answer 之后,我想我应该指定这个方法不能处理冲突。
如果您的 Map 包含键“toto”和“tata”,并且您执行 `replaceKeysChar('a','o', map) 仅在“toto”值和“tata”之间的值之一s 值将在地图中,另一个将被忽略。
编辑之二:
要处理异常冲突 (à la @Stephen C),只需用这个替换旧的 for :
for (Map.Entry<String, ?> entry : map.entrySet()) {
String key = entry.getKey();
if(key != null){
key = key.replace(originalChar, newChar);
}
if(tempMap.containsKey(key))
throw new CollisionException();
tempMap.put(key, entry.getValue());
}