假设我们有一个具有所有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"
答案 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()));