Объединение нескольких объектов с полями списка - PullRequest
0 голосов
/ 08 февраля 2019

Я работаю с объектами, у которых в качестве свойств есть списки строк:

public class MyObjectOne {
     private List<String> listOne;
     private List<String> listTwo;
     private MyObjectTwo myObjectTwo;
}

public class MyObjectTwo {
     private List<String> listOne;
     private List<String> listTwo;
} 

Я хочу объединить несколько объектов MyObjectOne таким образом, чтобы я получил один новый объект, в котором все списки объединеныВ том числе и во вложенных объектах MyObjectTwo.

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

Есть ли способ добиться этого без необходимости явного написания картографов для объектов?На практике у каждого объекта есть более 10 таких свойств List, и есть несколько вложенных объектов, поэтому выписать все это будет огромной болью.

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Я бы использовал интерфейс, который может возвращать все списки, которые должны быть объединены, и все вложенные объекты.Вот так:

interface Mergable {
    List<List<String>> getAllLists();

    List<Mergable> getAllNestedObjects();
}

class MyObjectOne implements Mergable {
    private List<String> listOne;
    private List<String> listTwo;
    private MyObjectTwo myObjectTwo;

    @Override
    public List<List<String>> getAllLists() {
        return Stream.of(listOne, listTwo).collect(toList());
    }

    @Override
    public List<Mergable> getAllNestedObjects() {
        return Stream.of(myObjectTwo).collect(toList());
    }
}

class MyObjectTwo implements Mergable {
    private List<String> listOne;
    private List<String> listTwo;

    @Override
    public List<List<String>> getAllLists() {
        return Stream.of(listOne, listTwo).collect(toList());
    }

    @Override
    public List<Mergable> getAllNestedObjects() {
        return Collections.emptyList();
    }
}

А затем с помощью рекурсии объедините их все в List или где бы вы ни собирались его хранить.

0 голосов
/ 08 февраля 2019

Добавьте следующий метод к MyObjectOne и получите для класса listOne и listTwo к MyObjectTwo.Кстати, вы должны были попробовать это сами.

public List<String> merge(){
    List<String> result = new ArrayList();
    result.addAll(listOne);
    result.addAll(listTwo);
    result.addAll(myObjectTwo.getListOne());
    result.addAll(myObjectTwo.getListTwo());
    return result;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...