Преобразование Java-объекта в массив или список его значений - PullRequest
0 голосов
/ 02 января 2019

Предположим, у меня есть такой POJO:

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

    // constructors here
}

Я создаю новый объект пользователя, как этот,

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

Мне нужно преобразовать этот объект в массив или список, содержащий ["1", "Ash", "dev"]. Кроме того, мне нужно поддерживать порядок значений в соответствии с полями. Я реализовал это с помощью отражения. Есть ли лучший подход?

Ответы [ 2 ]

0 голосов
/ 02 января 2019

Здесь было бы простым решением вывести значение всегда в том же порядке, используя отражение.

Это не идеально, но идея здесь в том, чтобы показать, как упорядочить массив полей, используя то, что должно оставаться неизменным. Здесь имя.

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, ноль]

Для более полного решения я бы использовал аннотацию, чтобы задать положение каждого значения, но также чтобы можно было игнорировать некоторые поля.

0 голосов
/ 02 января 2019

Вы можете сделать это разными способами!

Возможно, вам нужно переопределить метод toString

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

Затем вы можете использовать split() метод класса String для доступа к полям.

У вас также может быть другой метод, который возвращает массив строк, содержащих нужные поля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...