Проблема в том, что вы инициализируете свой список с помощью Arrays.asList () . Как упомянуто в документации:
Этот метод также предоставляет удобный способ создания списка фиксированного размера, инициализированного для нескольких элементов
и позже, когда вы хотите обновить ваш список фиксированного размера с добавлением новых элементов, которые вы получили: UnsupportedOperationException
.
В качестве решения вы можете использовать довольно полезный Guava's Списки класс утилит:
Lists.newArrayList (c, d);
Также предусмотрены Maps
утилиты.
Код для него будет выглядеть так:
public class MapDemo {
public static void main(String[] args) {
final int diff = 42;
HashMap<Integer, List<Integer>> map = Maps.newHashMap();
map.putIfAbsent(diff, Lists.newArrayList(1, 2));
// 1:
final List<Integer> integers = map.get(diff);
integers.add(10);
integers.add(11);
// 2:
map.get(diff).add(20);
map.get(diff).add(21);
// 3:
map.computeIfPresent(diff, (k, v) -> {
v.add(30);
return v;
});
map.computeIfPresent(diff, (k, v) -> {
v.add(31);
return v;
});
System.out.println(map);
}
}
Выход:
{42 = [1, 2, 10, 11, 20, 21, 30, 31]}
Как видите, все 3 дела выполнены хорошо.