Diese Frage sieht möglicherweise ähnlich aus wie die andere Frage Java 3-Ebenen-verschachtelte Liste zu 3-Ebenen-verschachtelter Karte, aber sie sind nicht gleich. In diesem Fall muss ich eine der Listen reduzieren.
Code: Select all
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 -> town.
Ich möchte so etwas wie „destinationMap.get("stateA").get("CountryA-StateA- CityA-TownA“) und das würde mir die Stadtinstanz mit dem Namen „CountryA-StateA-CityA-TownA“ geben.
Bitte helfen Sie, ich habe versucht, dies mithilfe von zu erreichen streamen, kann es aber nicht weit.
Ich habe Folgendes versucht:
Code: Select all
countryA.getStates()
.stream()
.collect(Collectors.toMap(State::getName,
st-> st.getCities()
.stream()
.collect(Collectors.toMap(City::getName,
City::getTowns))));

Ich möchte eine Karte von state.name bis town.name und der gleichnamigen Stadt.