2

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

Class Person {

 String name;
 String email;

}

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

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

输出应该是ArrayList<NameValuePair>具有以下内容的:

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

4 回答 4

4

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

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 + "]";
}

}

我希望这会有所帮助!

于 2014-11-14T13:23:28.817 回答
2

添加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;
}

但也许使用 a 是更好的选择Map......

于 2014-11-14T13:13:17.523 回答
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);
于 2014-11-14T13:10:48.413 回答
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()));
于 2017-08-15T09:22:48.407 回答