如何在Java中将Object转换为NameValuePair ArrayList?

时间:2014-11-14 13:04:55

标签: java object arraylist name-value

假设我们有一个具有所有String参数的Class Person对象:

Class Person {

 String name;
 String email;

}

Person p = new Person();
p.name = "ABC";
p.email = "abc@xyz.com";

我们如何将对象p转换为NameValue对的ArrayList:

输出应为ArrayList<NameValuePair>,内容如下:

"name" : "ABC" 
"email" : "abc@xyz.com"

4 个答案:

答案 0 :(得分:3)

你在这里..它是动态的,所以你可以将它用于任何对象..我正在使用反射

public static void main(String[] args) {

    Person person = new Person("Ali", "a@c.o");
    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:a@c.o]]

考虑到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 :(得分: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);

答案 2 :(得分: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可能是更好的选择......

答案 3 :(得分: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()));