【问题标题】:How to convert Object to NameValuePair ArrayList in Java?如何在 Java 中将 Object 转换为 NameValuePair ArrayList?
【发布时间】:2015-01-11 21:14:10
【问题描述】:

假设我们有一个带有所有字符串参数的类 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"

【问题讨论】:

  • 您的意思是名称为ABC,值为abc@xyz.com
  • 如果你想要名称值对,你应该使用哈希图。您的键可能是名称,值可能是电子邮件?或者您的键可以是名称,而您的值(对象)可以是 Person...

标签: java object arraylist 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);

【讨论】:

  • 但是建议name和email应该是私有变量,getter和setter应该暴露出来。
【解决方案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;
}

但使用Map 可能是更好的选择...

【讨论】:

    【解决方案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 + "]";
    }
    

    }

    我希望这会有所帮助!

    【讨论】:

      【解决方案4】:

      您可以将数组列表添加到代码中提到的名称值对。只需通过 .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()));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-08-12
        • 1970-01-01
        • 2014-05-09
        • 2012-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多