java - 将 java 对象转换为其值的数组或列表

标签 java arrays object

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

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

    // constructors here
}

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

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

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

最佳答案

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

这并不完美,但这里的想法是展示如何使用应该保持不变的内容对字段数组进行排序。这是名称。

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, Bar]
[5, 6, null]

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

关于java - 将 java 对象转换为其值的数组或列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54006192/

相关文章:

java - 使用 EL 动态访问 Bean 属性

java - 限制android密码edittext中的特殊字符

javascript - 找出数组中所有相同的数字

php - 如何检查对象是否为空?

c++ - 自己写c++ "array"类

Java设置JPanel的尺寸

java - synchronized 方法到底做了什么?

c - 将 char[] 写入数组

java - 对从文本文件中提取的数据进行排序

javascript - 错误 "document.getElementById(...)' 为 null 或不是对象”