如果我的HashMap<String,Object>
有三个<String,String>
条目,而<String,Integer>
有一个条目,则可以使用#34; cast&#34;这容易变成HashMap<String,String>
?现在我创建一个新的HashMap并复制所有值,以便我可以在复制过程中转换整数。
答案 0 :(得分:2)
应该能够投射它,但在尝试从地图中检索其中一个整数时会出现异常。
我认为你要问的是抛出hashmap的内容,在这种情况下是值,所以它们都是字符串,并且不会发生。
最佳解决方案是在首先填充地图时将整数转换为字符串。
答案 1 :(得分:0)
您可以投射原始地图,无需复制:
map.put("intKey", map.get("intKey").toString());
Map<String, String> fixedMap = (Map) map;
虽然你的设计看起来确实有问题。最好修复将整数推入地图开始的代码,这样你就不需要在下游处理这个技巧了。
答案 2 :(得分:0)
这样的事情应该更容易:
Class<? extends Object> className = obj.getClass();
if (className.getName().contains("String")){
//add the object
}else {
//convert it to String and then add to HashMap
}
答案 3 :(得分:0)
如果您正在使用java 8,则可以将forEach与BiConsumer一起使用。
看看下面的代码
Map<String, Object> map = new HashMap<>();
map.put("a", "a");
map.put("b", "b");
map.put("1", Integer.valueOf(1));
map.forEach((k, v) -> map.put(k, v.toString()));
在行map.forEach((k, v) -> map.put(k, v.toString()));
之后,地图中的所有值都是字符串。对于循环仍然存在的courste,但是您正在使用语言功能/资源。