2013-08-22 7 views
5

Ich erhalte map als Ergebnis, und wenn ich Wert bin immer muss ich es String wie unten konvertieren:prüfen Nullwert von Karte

a.setA(map.get("A").toString()); 

aber wenn es null zurück, als es nullPointerException wirft, so dass ich ändern es mit unter:

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

aber es gibt mehr als 20 Felder für, dass ich das gleiche tue so ich will nur wie unten tun:

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

aber es gibt blank alle Zeit, ich habe nur eine einfache Frage ist, kann ich Variablen wie diese verwenden? Oder gibt es eine andere Möglichkeit, dasselbe zu tun?

+0

Sie brauchen Klammern: 'a.setA ((val = map.get (" A "))! = Null? Val.toString():" ");' –

Antwort

13

Verwenden Sie eine Methode. Und vermeiden get() Aufruf zweimal:

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

nun nach mir wiederholen: "Ich werde keinen Code kopieren".

+0

Danke, genau ich wollte 'get()' reduzieren . – commit

1

Problem ist, dass val wird nicht den Wert erhalten Sie bis map.get("A")!=null?val.toString():"" ausgewertet wird, versuchen Sie stattdessen:

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

so dass Sie sicher bekommen, dass val=map.get("A") bevor die ganze Sache auswertet.

2

Warum Sie keine util Methode zu diesem wie erstellen:

public String getMapValue(Map m, String a){ 

    String s = m.get(a); 
    if(s == null) 
     return ""; 
    else 
     return s; 
} 

Jetzt anrufen müssen Sie nur diese Methode:

String val = getMapValue(map,"A"); 
a.setA(val); 
0

Sie können versuchen, diese

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