11

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

4

5 回答 5

36

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

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

于 2013-08-22T11:24:24.800 回答
3

你为什么不为此创建一个 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);
于 2013-08-22T11:24:41.600 回答
3

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

a.setA(map.getOrDefault("A", "").toString());
于 2019-02-21T17:37:42.360 回答
1

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

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

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

于 2013-08-22T11:23:53.017 回答
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);
       }
    }
于 2013-08-22T11:25:40.283 回答