检查地图的空值

时间:2013-08-22 11:19:02

标签: java

我收到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,我只是简单的问题是我不能像这样使用变量吗?或者还有其他选择吗?

5 个答案:

答案 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());