Сделай так. По сути, он использует функцию слияния, которая объединяет значения для дубликата ключа.
- Создание новой карты
- Использование значений старой карты для ключей к новой
- Если новая карта не имеет значения для ключа, поместите значение в новую карту
- В противном случае объедините значение со старым значением для этого ключа
HashMap<String, String> cities = new HashMap<String, String>();
cities.put("Manchester", "UK");
cities.put("London", "UK");
cities.put("New York", "US");
cities.put("Chicago", "US");
Map<String,String> inverted = new HashMap<>();
for (String key : cities.keySet()) {
String newKey = cities.get(key);
String value = inverted.get(newKey);
if (value == null) {
inverted.put(newKey, key);
} else {
value = value + ", " + key;
inverted.put(newKey, value);
}
}
for (Entry<String,String> e : inverted.entrySet()) {
System.out.println(e.getKey() + " -> " + e.getValue());
}
Он печатает
UK -> Manchester, London
US -> New York, Chicago
Поскольку вы не указали, как обрабатывать дубликаты ключей. Я мог бы также сохранить его в Map<String,List<String>>