Вы можете попробовать это:
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 Думаю, мне следует указать, что этот метод не может обрабатывать коллизии.
Если ваша Карта содержит ключи "toto" и "tata", и вы выполняете `replaceKeysChar ('a', 'o', map) только одно из значений между значением" toto "и" tata "' Значение s будет на карте, другое просто будет игнорироваться.
РЕДАКТИРОВАТЬ бис:
Для обработки коллизий с исключениями (как @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());
}