2014-11-14 42 views
1

比方說我們有所有的字符串參數person類的一個對象:如何將對象轉換爲Java中的NameValuePair ArrayList?

Class Person { 

String name; 
String email; 

} 

Person p = new Person(); 
p.name = "ABC"; 
p.email = "[email protected]"; 

我們如何轉換對象p來NameValue對的ArrayList中:

輸出應該是一個ArrayList<NameValuePair>具有以下內容:

"name" : "ABC" 
"email" : "[email protected]" 
+0

您的意思是作爲'ABC'的名稱和值爲'abc @ xyz.com' – 2014-11-14 13:06:23

+0

如果您想要名稱值對,則應該使用散列表。你的鑰匙可以是名字和價值可以是電子郵件?或者你的密鑰可能是名字,你的價值(對象)可能是Person ... – brso05 2014-11-14 13:07:15

回答

3

給你..它是一個動態的,所以你可以使用它的任何對象..我使用的是反射

public static void main(String[] args) { 

    Person person = new Person("Ali", "[email protected]"); 
    try { 
     System.out.println(getObjectNameValuePairs(person)); 

    } catch (IllegalArgumentException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IllegalAccessException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

} 

public static ArrayList<NameValuePair> getObjectNameValuePairs(Object obj) throws IllegalArgumentException, IllegalAccessException { 
    ArrayList<NameValuePair> list = new ArrayList<NameValuePair>(); 
    for (Field field : obj.getClass().getDeclaredFields()) { 
     field.setAccessible(true); // if you want to modify private fields 
     NameValuePair nameValuePair = new NameValuePair(); 
     nameValuePair.setName(field.getName()); 
     nameValuePair.setValue(field.get(obj)); 
     list.add(nameValuePair); 
    } 
    return list; 
} 

這個輸出是

[[name:Ali], [email:[email protected]]] 

考慮到的NameValuePair實現

public class NameValuePair { 
private String name; 
private Object value; 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

public Object getValue() { 
    return value; 
} 

public void setValue(Object value) { 
    this.value = value; 
} 

@Override 
public String toString() { 
    return "["+ name + ":" + value + "]"; 
} 

}

我希望這可以幫助!

1

以下方法可以做到。

Map<String, String> map = new HashMap<String, String>(); 
map.put(p.name, p.email); 

,或者你可以做這樣的

Map<String, Person> map = new HashMap<String, Person>(); 
map.put(p.name, p); 
+0

但是建議名稱和電子郵件應該是私有變量,並且應該暴露getter和setter。 – 2014-11-14 13:12:48

1

添加在Person get方法:

public NameValuePair getAsNameValuePair() { 
    NameValuePair pair=new BasicNameValuePair(this.getName,this.getEmail); 
    return pair; 
} 

如果你想的人存放在數組中:

public List<NameValuePair> getAsNameValuePair() { 
    List<NameValuePair> pairs = new ArrayList<NameValuePair>(); 
    pairs.add(new BasicNameValuePair("name", this.getName); 
    pairs.add(new BasicNameValuePair("email", this.getEmail); 
    return pairs; 
} 

但也許是更好的選擇使用Map,而不是...

0

您可以將數組列表添加到名稱值對中,如代碼中所述。只需通過.toString()方法將數組列表轉換爲字符串即可。

kk = new ArrayList<NameValuePair>(); 
    kk.add(new BasicNameValuePair("task_id",task_id.toString())); 
    kk.add(new BasicNameValuePair("task_status",task_status.toString())); 
    kk.add(new BasicNameValuePair("task_remarks",task_remarks.toString())); 
    kk.add(new BasicNameValuePair("task_rca",task_rca.toString())); 


kk.add(newBasicNameValuePair("equip_serial_no",equip_serial_no.toString())); 
相關問題