繁体   English   中英

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

[英]Converting java object to a array or list of its values

假设我有一个像这样的POJO:

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

    // constructors here
}

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

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

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

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

可能要重写toString方法是您想要的!

@Override
public String toString(){
    return "[" + id + "," + name + "," + job + "]";
}

然后,您可以使用String类的split()方法访问字段。

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

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

这不是完美的方法,但是这里的想法是显示如何使用应该保持相同的东西来排序字段数组。 这里的名字。

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]

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM