Здесь было бы простым решением вывести значение всегда в том же порядке, используя отражение.
Это не идеально, но идея здесь в том, чтобы показать, как упорядочить массив полей, используя то, что должно оставаться неизменным. Здесь имя.
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, ноль]
Для более полного решения я бы использовал аннотацию, чтобы задать положение каждого значения, но также чтобы можно было игнорировать некоторые поля.