2013-08-22 44 views
5

Tôi nhận map kết quả và khi tôi nhận được giá trị tôi cần phải chuyển nó sang String như dưới đây:Kiểm tra giá trị null của bản đồ

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

nhưng nếu nó trả null hơn nó ném nullPointerException, vì vậy tôi thay đổi nó với bên dưới:

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

nhưng có hơn 20 lĩnh vực cho rằng tôi đang làm việc cùng vì vậy tôi chỉ muốn làm như dưới đây:

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

nhưng nó trả về blank tất cả thời gian, tôi chỉ có câu hỏi đơn giản là tôi không thể sử dụng biến như thế này? hoặc có tùy chọn nào khác để thực hiện tương tự không?

+0

Bạn cần dấu ngoặc đơn: 'a.setA ((val = map.get (" A "))! = Null? Val.toString():" ");' –

Trả lời

13

Sử dụng phương pháp. Và tránh gọi get() hai lần:

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

Bây giờ lặp lại theo tôi: "Tôi sẽ không trùng lặp mã".

+0

Cảm ơn, chính xác tôi đã muốn giảm 'get()' . – commit

1

Vấn đề là val sẽ không nhận được giá trị mà bạn muốn cho đến khi map.get("A")!=null?val.toString():"" được đánh giá, thử loại này thay vì:

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

để bạn có được chắc chắn rằng val=map.get("A") đánh giá trước khi toàn bộ điều.

2

Tại sao bạn không tạo ra một phương pháp util để như thế này:

public String getMapValue(Map m, String a){ 

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

Bây giờ bạn chỉ cần gọi phương pháp này:

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

Bạn có thể thử này

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); 
     } 
    } 
Các vấn đề liên quan