Java 轻松转换地图<;字符串,对象>;映射<;字符串,字符串>;
我正在使用的API有一个返回Java 轻松转换地图<;字符串,对象>;映射<;字符串,字符串>;,java,map,casting,Java,Map,Casting,我正在使用的API有一个返回映射的方法,但我知道在这种情况下对象是字符串,所以我希望它是映射 但出于某种原因,我不能将其强制转换,Java说由于某种原因,Map不能强制转换为Map 我用过: Map<String, Object> tempMap = someApiMethodReturningAMap(); Map<String, String> map = new HashMap<String, String>(); for (String i : tem
映射的方法,但我知道在这种情况下对象是字符串,所以我希望它是映射
但出于某种原因,我不能将其强制转换,Java说由于某种原因,Map
不能强制转换为Map
我用过:
Map<String, Object> tempMap = someApiMethodReturningAMap();
Map<String, String> map = new HashMap<String, String>();
for (String i : tempMap.keySet()) {
map.put(i, String.valueOf(tempMap.get(i)));
}
Map tempMap=someApiMethodReturningAMap();
Map Map=newhashmap();
for(字符串i:tempMap.keySet()){
map.put(i,String.valueOf(tempMap.get(i));
}
作为一种解决方法,但有更简单的方法吗?您不能安全地将其强制转换为映射,因为即使您知道只有字符串作为值,编译器也不会。这就像期待:
Object x = "foo";
String y = x;
工作——它不工作;您需要显式地强制转换
同样,如果通过对象
,也可以在此处显式强制转换:
Map<String, Object> x = ...;
Map<String, String> y = (Map<String, String>) (Object) x;
Java 8解决方案:
private Map<String, String> stringifyValues(Map<String, Object> variables) {
return variables.entrySet().stream()
.collect(Collectors.toMap(Map.Entry::getKey, e -> (String) e.getValue()));
}
私有映射值(映射变量){
返回变量。entrySet().stream()
.collect(Collectors.toMap(Map.Entry::getKey,e->(String)e.getValue());
}
这里有很好的解决方案,但我想添加另一个解决方案,考虑处理null
值:
Map<String,Object> map = new HashMap<>();
Map<String,String> stringifiedMap = map.entrySet().stream()
.filter(m -> m.getKey() != null && m.getValue() !=null)
.collect(Collectors.toMap(Map.Entry::getKey, e -> (String)e.getValue()));
Map Map=newhashmap();
Map stringifiedMap=Map.entrySet().stream()
.filter(m->m.getKey()!=null和&m.getValue()!=null)
.collect(Collectors.toMap(Map.Entry::getKey,e->(String)e.getValue());
这是一种简单易懂的方法,我只建议将强制转换更改为“String.valueOf()”——您需要对对象arg的toString()方法进行有意义的解释。@hovanesyan谢谢,已编辑。
private Map<String, String> stringifyValues(Map<String, Object> variables) {
return variables.entrySet().stream()
.collect(Collectors.toMap(Map.Entry::getKey, e -> (String) e.getValue()));
}
Map<String,Object> map = new HashMap<>();
Map<String,String> stringifiedMap = map.entrySet().stream()
.filter(m -> m.getKey() != null && m.getValue() !=null)
.collect(Collectors.toMap(Map.Entry::getKey, e -> (String)e.getValue()));