Как объединить ключи на основе значения в hashmap?
Мне интересно, был ли способ объединить ключи на основе одинаковых значений в Hashmap. Ex.
A->2
B->1
C->2
Результат, который я ищу:
2 - A, C
1 - B
4 ответа
Одним из способов является определение вашей карты следующим образом:
Map<String,List<String>> multiValueMap = new HashMap();
Или, если вы не хотите изобретать велосипед, используйте Apache MultiMap
Вам придется изменить структуру данных, чтобы хранить данные таким образом. Использовать HashMap
из ArrayList
или же Set
(в зависимости от вас), чтобы сделать это.
пример
HashMap<Character, Integer> map = new HashMap<>();
map.put('A', 2);
map.put('B', 1);
map.put('c', 2);
// SORTED
HashMap<Integer, List<Character>> sortedMap = new HashMap<>();
ArrayList<Character> list = new ArrayList<>();
for(Map.Entry<Character, Integer> entry : map.entrySet()){
list = sortedMap.get(entry.getValue());
if(list == null){
list = new ArrayList<>();
entry.put(entry.getValue(), list);
}
list.add(entry.getKey());
}
HashMap Reversal
HashMap<String,Integer> aHM = new HashMap<String,Integer>();
HashMap<Integer,ArrayList<String>> aHMrev = new HashMap<Integer,ArrayList<String>>();
//HashMap Reversal
for (String f : aHM.keySet()){
if(aHMrev.get(aHM.get(f)) != null){
ArrayList<String> al = aHMrev.get(aHM.get(f));
al.add(f);
aHMrev.put(aHM.get(f), al);
}
else{
ArrayList<String> al = new ArrayList<String>();
al.add(f);
aHMrev.put(aHM.get(f), al);
}
}
пример
aHM = [LMWEB1B-VMH.log=Group1,PLMWEB1E-VMH.csv=Group3,
LMWEB1A-VMH.log=Group1,
LMWEB1E-VMH.log=Group2,
PLMWEB1D-VMH.csv=Group3,
LMWEB1F-VMH.log=Group2,
PLMWEB1C-VMH.csv=Group3,
PLMWEB1A-VMH.csv=Group2,
PLMWEB1B-VMH.csv=Group3,
PLMDB1-VMH.csv=Group2,
LMWEB1D-VMH.log=Group1,
PLMWEB1F-VMH.csv=Group3,
LMWEB1C-VMH.log=Group1]
aHMrev = {
Group1=[LMWEB1B-VMH.log, LMWEB1A-VMH.log, LMWEB1D-VMH.log,LMWEB1C-VMH.log],
Group2=[LMWEB1E-VMH.log, LMWEB1F-VMH.log,PLMWEB1A-VMH.csv,PLMDB1-VMH.csv],
Group3=[D:\Trash\Logs\Perfmon\PLMWEB1E-VMH.csv,PLMWEB1D-VMH.csv,PLMWEB1C-VMH.csv,PLMWEB1B-VMH.csv,PLMWEB1F-VMH.csv]}
Вы просто создаете HaspMap
как ниже:
Map<Integer, List<String>> map1 = new HashMap<>();
ArrayList<String> al = new ArrayList<>();
al.add("B");
map1.put(1, al);
al = new ArrayList<>();
al.add("A");
al.add("C");
map1.put(2, al);