我有一个HashMap<Integer, List<Integer>>
“sq_diff
”,我正在尝试更新条目。
我尝试过:
List<Integer> values = sq_diff.get(diff);
values.add(c);
values.add(d);
sq_diff.put(diff, values);
和
sq_diff.get(diff).add(c);
sq_diff.get(diff).add(d);
和
sq_diff.computeIfPresent(diff, (k, v) -> v.add(c);
sq_diff.computeIfPresent(diff, (k, v) -> v.add(d);
他们都没有工作:
Exception in thread "main" java.lang.UnsupportedOperationException
map 包含条目“diff
”
如果您能指出每个问题的问题,我们将不胜感激。
最佳答案
问题是当您通过 Arrays.asList() 初始化列表时。正如文档中提到的:
This method also provides a convenient way to create a fixed-size list initialized to contain several elements
稍后,当您想要通过添加新元素来更新固定大小列表时,您会得到:UnsupportedOperationException
。
作为解决方案,您可以使用非常有用的 Guava 的 Lists实用程序类:
Lists.newArrayList(c, d);
它还提供 map
实用程序。
它的代码如下所示:
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 个案例都执行得很好。
关于java - 更新值为 List 的 HashMap 条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60343281/