Самый простой метод:
- Получить первый ключ
HashMap
и выполнить итерацию по карте, проверяя наличие ключей с тем же значением. - Если найденоудалите этот ключ из карты и сохраните ключ в другой коллекции (возможно,
Vector
). - Затем, после проверки всех остальных ключей, добавьте текущий ключ в эту коллекцию.
- Если другие ключи не найдены, добавьте текущий ключ в эту коллекцию.
- Затем добавьте ключи в этой коллекции на другую карту с соответствующим значением.Очистите коллекцию.
- Перейдите к следующей клавише и сделайте то же самое.
После этого вы получите то, что хотите.
РЕДАКТИРОВАТЬ:Код:
HashMap comp = new HashMap(); // Calculations Done
Vector v = new Vector(); // Temporary List To Store Keys
// Get The List Of Keys
Vector<Integer> keys = new Vector<Integer>();
Iterator<Integer> it = hm.keySet().iterator();
while(it.hasNext()) keys.add(it.next());
// For Every Key In Map...
for(int i = 0; i < hm.size(); i++) {
int key = keys.get(i);
v.add(key); // Add the Current Key To Temporary List
// Check If Others Exist
for(int j = i+1; j < hm.size(); j++) {
int nkey = keys.get(j);
if(hm.get(key).equals(hm.get(nkey))) {
v.add(nkey);
}
}
// Store The Value Of Current Key And The Keys In Temporary List In The Comp HashMap
String val = hm.get(key);
String cKey = "";
for(int x = 0; x < v.size(); x++)
cKey += v.get(x) + ",";
// Remove The Comma From Last Key, Put The Keys As Value And Value As Key
cKey = cKey.substring(0, cKey.length()-1);
comp.put(cKey, val);
// Clear The Temporary List
v.clear();
}
В этом коде есть небольшая проблема: появляются дубликаты, и последний дубликат кажется правильным.
Вывод с использованием вашего примера дает.(Вам нужно немного отформатировать).
{3=a,b, 6=c, 5=e,c, 2,5=e,c, 4=f, 1,3=a,b}