Liste von Listenlisten zu einer Karte oder Flatten-Karte von ListenJava

Java-Forum
Guest
 Liste von Listenlisten zu einer Karte oder Flatten-Karte von Listen

Post by Guest »

Ich habe Listen (Staaten), Listen (Städte) und Listen (Städte). Wie reduziere ich die mittlere Liste (Städte) und konvertiere sie in eine Karte (Name des Staates) oder eine Karte (Name der Stadt) mit Listen (Städten)?
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));

}

}
Ich möchte eine Karte mit den Bundesstaaten der Städte. (Daher wird die Städteliste abgeflacht):
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))));
Dadurch wird eine Karte von state.name über city.name bis hin zu Städten erstellt. Aber das ist nicht das, was ich will.
Image

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

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post