2013-08-22 21 views
5

jestem coraz map jako rezultat i kiedy otrzymuję wartość muszę go przekonwertować do String jak poniżej:Sprawdź zerowa wartość mapie

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

ale jeśli zwróci null niż rzuca nullPointerException, więc mogę zmienić to z poniżej:

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

ale istnieje ponad 20 pól na to robie to samo, więc po prostu chcą zrobić jak poniżej:

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

ale cały czas zwraca blank, mam tylko proste pytanie, czy nie mogę używać zmiennej takiej jak ta? czy jest jakaś inna możliwość robienia tego samego?

+0

Potrzebujesz nawiasów: 'a.setA ((val = map.get (" A "))! = Null? Val.toString():" ");' –

Odpowiedz

13

Użyj metody. I uniknąć wywoływania get() dwukrotnie:

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

teraz powtarzaj za mną: "Nie będę powielać kodu".

+0

Dzięki, dokładnie chciałem zmniejszyć 'get()' . – commit

1

Problem jest to, że val przyzwyczajenie się żądaną wartość aż map.get("A")!=null?val.toString():"" ocenia, spróbuj zamiast tego:

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

więc masz pewność, że val=map.get("A") ocenia przed całą sprawę.

2

Dlaczego nie stworzyć metodę util to tak:

public String getMapValue(Map m, String a){ 

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

Teraz wystarczy zadzwonić ta metoda:

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

Można spróbować tej

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); 
     } 
    } 
Powiązane problemy