繁体   English   中英

检查地图的空值

[英]Check null value of map

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

使用方法。 并避免两次调用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");

现在重复一遍:“我不会重复代码”。

为什么不为此创建一个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);

问题是val不会得到你想要的值,直到map.get("A")!=null?val.toString():""被评估,试试这个:

String val = "";
a.setA((val=map.get("A"))!=null?val.toString():"");

所以你要确保val=map.get("A")在整个事情之前进行评估。

你可以试试这个

    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);
       }
    }

使用Java 8,您可以执行以下操作:

a.setA(map.getOrDefault("A", "").toString());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM