Преобразование списка Pojo во вложенные списки - PullRequest
0 голосов
/ 15 сентября 2018

У меня есть 3 объекта: страна, штат, город Я написал их POJO как:

class Country{
String countryName;
List<State> states;
}

class State{
String stateName;
List<City> cities;
}

class City{
String cityName;
}

Моя таблица базы данных выглядит следующим образом:

Goegraphy
---------
countryName | stateName | cityName

Теперь для извлечения данных из базы данных я сделал еще одно POJO:

class Geography{
String countryName;
String stateName;
String cityName;
}

У меня есть список объектов географии. Но мое требование состоит в том, чтобы преобразовать этот список в более раннюю модель Country-State-City. Может кто-нибудь, пожалуйста, помогите, как это может быть достигнуто.

Ответы [ 2 ]

0 голосов
/ 15 сентября 2018

То, что вы ищете, - это Ассоциация один-ко-многим реляционных баз данных. Все реализации JPA могут сделать это для вас без необходимости реализации вашего Geography Pojo.

Но если вы застряли, чтобы сделать это вручную, вот не очень оптимизированный способ сделать это с потоками Java 8

class Country {

    public Country(String countryName) {
        this.countryName = countryName;
        this.states = new ArrayList<>();
    }

    String countryName;
    List<State> states;

}

class State {

    public State(String stateName) {
        this.stateName = stateName;
        this.cities = new ArrayList<>();
    }


    String stateName;
    List<City> cities;
}

class City {
    public City(String cityName) {
        this.cityName = cityName;
    }

    String cityName;
}

class Geography {
    String countryName;
    String stateName;
    String cityName;
}


List<Country> buildFromGeographies(List<Geography> geos) {

    List<Country> result = new ArrayList<>();

    for (Geography geo : geos) {
        Optional<Country> country1 = result.stream().filter(country -> country.countryName.equals(geo.countryName)).findFirst();
        Country country = country1.orElseGet(() -> {
            Country newOne = new Country(geo.countryName);
            result.add(newOne);
            return newOne;
        });

        Optional<State> state1 = country.states.stream().filter(state -> state.stateName.equals(geo.stateName)).findFirst();
        State state = state1.orElseGet(() -> {
            State newOne = new State(geo.stateName);
            country.states.add(newOne);
            return newOne;
        });

        // taking for granted there is no duplicates in your data set
        state.cities.add(new City(geo.cityName));
    }

    return result;

}
0 голосов
/ 15 сентября 2018

Если я правильно понимаю, у вас есть Список из таблицы, и вы хотите, чтобы он отображался на ваших классах POJO. Но проблема в том, что у вас есть дублированные значения в таблице, если я правильно понимаю. Я думаю, у вас есть эти данные в таблице 1. США, Флорида, Майами 2. США, Флорида, Сарасота

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


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