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()また、 2 回呼び出すことは避けてください。

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 に答える
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 に答える