假设我有一个像这样的 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/