Этот вопрос может выглядеть аналогично другому вопрос: вложенный список Java 3-го уровня и вложенная карта 3-го уровня, но они не совпадают. Мне нужно сгладить один из списков.
Код: Выделить всё
import lombok.AllArgsConstructor;
import lombok.Data;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Data
@AllArgsConstructor
class Country {
private String name;
private List states;
}
@Data
@AllArgsConstructor
class State {
private String name;
private List cities;
}
@Data
@AllArgsConstructor
class City {
private String name;
private List towns;
}
@Data
@AllArgsConstructor
class Town {
private String name;
private String address;
private Integer population;
}
public static void main(String[]args) {
List countryAStateACityATownsList = new ArrayList();
countryAStateACityATownsList.add(new Town("CountryA-StateA-CityA-TownA", "addressOfCountryA-StateA-CityA-TownA", 100));
countryAStateACityATownsList.add(new Town("CountryA-StateA-CityA-TownB", "addressOfCountryA-StateA-CityA-TownB", 100));
countryAStateACityATownsList.add(new Town("CountryA-StateA-CityA-TownC", "addressOfCountryA-StateA-CityA-TownC", 100));
List countryAStateACityBTownsList = new ArrayList();
countryAStateACityBTownsList.add(new Town("CountryA-StateA-CityB-TownA", "addressOfCountryA-StateA-CityB-TownA", 100));
countryAStateACityBTownsList.add(new Town("CountryA-StateA-CityB-TownB", "addressOfCountryA-StateA-CityB-TownB", 100));
countryAStateACityBTownsList.add(new Town("CountryA-StateA-CityB-TownC", "addressOfCountryA-StateA-CityB-TownC", 100));
List countryAStateACityCTownsList = new ArrayList();
countryAStateACityCTownsList.add(new Town("CountryA-StateA-CityC-TownA", "addressOfCountryA-StateA-CityC-TownA", 100));
countryAStateACityCTownsList.add(new Town("CountryA-StateA-CityC-TownB", "addressOfCountryA-StateA-CityC-TownB", 100));
countryAStateACityCTownsList.add(new Town("CountryA-StateA-CityC-TownC", "addressOfCountryA-StateA-CityC-TownC", 100));
City cityA = new City("cityA", countryAStateACityATownsList);
City cityB = new City("cityB", countryAStateACityBTownsList);
City cityC = new City("cityC", countryAStateACityCTownsList);
List countryAStateACitiesList = new ArrayList();
countryAStateACitiesList.add(cityA);
countryAStateACitiesList.add(cityB);
countryAStateACitiesList.add(cityC);
State stateA = new State("stateA",countryAStateACitiesList);
Country countryA = new Country("countryA", Collections.singletonList(stateA));
}
}
state.name -> Town.name -> city.
Я хочу сделать что-то вроде DestinationMap.get("stateA").get("CountryA-StateA- CityA-TownA"), и это даст мне экземпляр города с именем "CountryA-StateA-CityA-TownA".
Пожалуйста, помогите, я пытался сделать это с помощью поток, но не пока могу.
Я пробовал это:
Код: Выделить всё
countryA.getStates()
.stream()
.collect(Collectors.toMap(State::getName,
st-> st.getCities()
.stream()
.collect(Collectors.toMap(City::getName,
City::getTowns))));

Мне нужна карта от state.name до Town.name и города с таким же названием.
Подробнее здесь: https://stackoverflow.com/questions/676 ... p-of-lists