在java中,字典随机访问给定密钥的映射条目
我有一本类型为Map<?, String>
的字典。运行时密钥类型未知。我仍然可以用字符串调用get()
,如果存在这样的元素,我就可以正确地得到存储的对象
现在我修改该对象,并希望将其放回字典中。理想情况下,我想做这样的事情:
Map<String, String> hat = new HashMap<>();
hat.put("bunny", "rabbit");
Map<?, String> magicHat = hat;
String trick = magicHat.get("bunny");
if (trick != null) {
trick = "jack".concat(trick);
magicHat.put("bunny", trick);
}
但是,可以理解的是,调用magicHat.put("bunny", trick);
会产生以下编译错误:incompatible types: String cannot be converted to CAP#1
解决此问题的一种方法是使用streams(或迭代)获取贴图的条目,然后使用该条目修改值:
Map.Entry<?, String> entry = magicHat.entrySet()
.stream()
.filter(e -> "bunny".equals(e.getKey()))
.findFirst()
.orElse(null);
if (entry != null) {
String trick = "jack".concat(entry.getValue());
entry.setValue(trick);
}
然而,在现实生活中,我必须使用Java6,无法承受流的舒适性。迭代所有条目似乎效率低下
有没有一种优雅的方法可以随机访问地图中的某个条目(给定其密钥)
谢谢你的见解
# 1 楼答案
您应该将键类型设置为Object,而不是通配符(?)。这样,你就不必知道类型了。但是,您应该确保从不在地图中存储不同类型的键
在大多数情况下,这个问题的解决方案是使用泛型类型变量。这样,您仍然具有类型安全性,但不必在编译时知道密钥类型