将Java对象转换为数组或值列表

时间:2019-01-02 12:14:40

标签: java arrays object

假设我有一个这样的POJO:

class User {
    String id;
    String name;
    String job;

    // constructors here
}

我这样创建一个新的用户对象,

User u = new User("1", "Ash", "dev");

我需要将此对象转换为包含["1", "Ash", "dev"]的数组或列表。 另外,我需要根据字段维护值的顺序。 我已经使用反射实现了这一点。有没有更好的方法?

2 个答案:

答案 0 :(得分:0)

您可以通过多种方式做到这一点!

您可能想要覆盖this.name方法!

toString

然后,您可以使用@Override public String toString(){ return "[" + id + "," + name + "," + job + "]"; } 类的split()方法来访问字段。

您还可以使用另一个方法来返回包含所需字段的字符串数组。

答案 1 :(得分:0)

这是一种使用反射始终按相同顺序输出值的简单解决方案。

这不是完美的方法,但是这里的想法是展示如何使用保持不变的方式对字段数组进行排序。这里是名字。

public static void toArray(Object o){
    List<String> list;

    list = Arrays
            .stream(o.getClass().getDeclaredFields())
            .sorted((f1, f2) -> f1.getName().compareTo(
                    f2.getName())).map(f -> {
                try {
                    return Optional.ofNullable(f.get(o));
                } catch (Exception e) {
                    return Optional.empty();
                }
            })
            .map(opt -> opt.orElse("null"))
            .map(Object::toString)
            .collect(Collectors.toList());

    System.out.println(list);
}

一个简单的例子

public static void main(String[] args) {
    toArray(new TestClass("Foo", 1, 2L));
    toArray(new TestClass("Bar", 3, 4L));
    toArray(new TestClass(null, 5, 6L));
}
  

[1,2,Foo]
  [3,4,酒吧]
  [5,6,null]

为获得更完整的解决方案,我将使用注释设置每个值的位置,但也可以忽略某些字段。