Скажем, у меня есть HashMap со строковыми клавишами и значениями Integer:
map = {cat=1, kid=3, girl=3, adult=2, human=5, dog=2, boy=2}
Я хочу переключать ключи и значения, помещая эту информацию в другую HashMap. Я знаю, что HashMap не может иметь дубликаты ключей, поэтому я попытался помещать информацию в HashMap с помощью Integer для ключей, которые будут отображаться в String ArrayList, чтобы я мог потенциально иметь одно целочисленное сопоставление с несколькими строками:
swap = {1=[cat], 2=[adult, dog, boy], 3=[kid, girl], 5=[human]}
Я попробовал следующий код:
HashMap<Integer, ArrayList<String>> swap = new HashMap<Integer, ArrayList<String>>();
for (String x : map.keySet()) {
for (int i = 0; i <= 5; i++) {
ArrayList<String> list = new ArrayList<String>();
if (i == map.get(x)) {
list.add(x);
swap.put(i, list);
}
}
}
Единственное различие в моем коде состоит в том, что я не усложнил код 5 в свой индекс; У меня есть метод, который находит самое высокое целочисленное значение в исходном HashMap и использовал это. Я знаю, что он работает правильно, потому что я получаю тот же результат, даже если я жестко кодирую 5, я просто не использовал его для экономии места.
Моя цель состоит в том, чтобы иметь возможность сделать это "разворот" с любым набором данных, иначе я мог бы просто записать код. Результат, полученный из приведенного выше кода, следующий:
swap = {1=[cat], 2=[boy], 3=[girl], 5=[human]}
Как вы можете видеть, моя проблема в том, что значение ArrayList удерживает только последнюю строну, которая была помещена в нее, а не собирать все из них. Как заставить ArrayList хранить каждую строку, а не только последнюю строку?