我收到map
作为结果,当我获得价值时,我需要将其转换为String
,如下所示:
a.setA(map.get("A").toString());
但是如果它返回null
而不是nullPointerException
,那么我将使用以下内容进行更改:
a.setA(map.get("A")!=null?map.get("A").toString():"");
但是我有20多个字段,所以我只是想这样做:
String val = "";
a.setA(val=map.get("A")!=null?val.toString():"");
但是它一直返回blank
,我只是简单的问题是我不能像这样使用变量吗?或者还有其他选择吗?
答案 0 :(得分:20)
使用方法。并且避免两次致电get()
:
private String valueToStringOrEmpty(Map<String, ?> map, String key) {
Object value = map.get(key);
return value == null ? "" : value.toString();
}
...
String a = valueToStringOrEmpty(map, "A");
String b = valueToStringOrEmpty(map, "B");
现在在我之后重复:“我不会重复代码”。
答案 1 :(得分:2)
为什么不为此创建一个util方法:
public String getMapValue(Map m, String a){
String s = m.get(a);
if(s == null)
return "";
else
return s;
}
现在你只需要调用这个方法:
String val = getMapValue(map,"A");
a.setA(val);
答案 2 :(得分:1)
问题是val
在评估map.get("A")!=null?val.toString():""
之前不会得到您想要的值,请尝试这样做:
String val = "";
a.setA((val=map.get("A"))!=null?val.toString():"");
所以你要确保val=map.get("A")
在整个事情之前进行评估。
答案 3 :(得分:0)
你可以试试这个
Map<String,String> map=new HashMap<>();
Set<String> keySet=map.keySet();
Iterator it=keySet.iterator();
while (it.hasNext()){
if(map.get(it)!=null){
a.setA(map.get(it).toString());
}else{
a.setA(null);
}
}
答案 4 :(得分:0)
使用Java 8,您可以执行以下操作:
a.setA(map.getOrDefault("A", "").toString());