Java 3级嵌套列表到3级嵌套映射 [英] Java 3 level nested list to 3 level nested map

查看:84
本文介绍了Java 3级嵌套列表到3级嵌套映射的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个列表列表.如何转换为地图地图?

I have a lists of lists of lists. How do I convert to map of maps of maps?

Public class Country{
  private String name;
  private List<State> states;
}

Public class State{
  private String name;
  private List<City> cities
}

Public class City{
  private String name;
  private List<Town> towns
}

public class Town{
  private String name;
  private Integer population;
}

我想要一张这些格式的城镇城市地图:

I want a map of states of cities of towns in these formats:

  1. 使用整个对象作为键:1级:状态->城市.2级:城市->镇.

  1. Using the whole object as the keys: 1st level: state -> cities. 2nd level: cities -> town.

使用名称作为键:1级:州名->城市的名字.2级:城市名称->城镇

Using the names as the keys: 1st level: state's name -> city's name. 2nd level: city's name -> town

请帮助,我一直在尝试通过使用流来完成此操作,但到目前为止还无法完成.

Please help, I have been trying to accomplish this by using stream, but not able to so far.

推荐答案

您可以执行以下操作:

Map<State, Map<City, List<Town>>> stateToCitiesToTowns =
        country.getStates().stream()
                .collect(Collectors.toMap(state -> state, state -> state.getCities().stream()
                        .collect(Collectors.toMap(city -> city, City::getTowns))));

System.out.println(stateToCitiesToTowns);

Map<String, Map<String, List<String>>> stateToCitiesToTownNames =
        country.getStates().stream()
                .collect(Collectors.toMap(State::getName, state -> state.getCities().stream()
                        .collect(Collectors.toMap(City::getName, city -> city.getTowns().stream()
                                .map(Town::getName)
                                .collect(Collectors.toList())))));

System.out.println(stateToCitiesToTownNames);

输入:

Country country = new Country("CountryA", Arrays.asList(
        new State("StateA", Arrays.asList(
                new City("cityA", Arrays.asList(
                        new Town("townA", 4),
                        new Town("townB", 5),
                        new Town("townC", 42),
                        new Town("townD", 67)
                )),
                new City("cityB", Arrays.asList(
                        new Town("townE", 65),
                        new Town("townF", 14),
                        new Town("townG", 24),
                        new Town("townH", 33)
                )))),
        new State("StateB", Arrays.asList(
                new City("cityC", Arrays.asList(
                        new Town("townI", 9),
                        new Town("townJ", 5),
                        new Town("townK", 12),
                        new Town("townL", 4)
                )),
                new City("cityD", Arrays.asList(
                        new Town("townM", 5),
                        new Town("townN", 7),
                        new Town("townO", 24),
                        new Town("townP", 6)
                ))))));

输出(由于键和值都具有相同的列表,所以很长):

Output (it's very long since the both key and value have same lists):

{State(name=StateB, cities=[City(name=cityC, towns=[Town(name=townI, population=9), Town(name=townJ, population=5), Town(name=townK, population=12), Town(name=townL, population=4)]), City(name=cityD, towns=[Town(name=townM, population=5), Town(name=townN, population=7), Town(name=townO, population=24), Town(name=townP, population=6)])])={City(name=cityC, towns=[Town(name=townI, population=9), Town(name=townJ, population=5), Town(name=townK, population=12), Town(name=townL, population=4)])=[Town(name=townI, population=9), Town(name=townJ, population=5), Town(name=townK, population=12), Town(name=townL, population=4)], City(name=cityD, towns=[Town(name=townM, population=5), Town(name=townN, population=7), Town(name=townO, population=24), Town(name=townP, population=6)])=[Town(name=townM, population=5), Town(name=townN, population=7), Town(name=townO, population=24), Town(name=townP, population=6)]}, State(name=StateA, cities=[City(name=cityA, towns=[Town(name=townA, population=4), Town(name=townB, population=5), Town(name=townC, population=42), Town(name=townD, population=67)]), City(name=cityB, towns=[Town(name=townE, population=65), Town(name=townF, population=14), Town(name=townG, population=24), Town(name=townH, population=33)])])={City(name=cityB, towns=[Town(name=townE, population=65), Town(name=townF, population=14), Town(name=townG, population=24), Town(name=townH, population=33)])=[Town(name=townE, population=65), Town(name=townF, population=14), Town(name=townG, population=24), Town(name=townH, population=33)], City(name=cityA, towns=[Town(name=townA, population=4), Town(name=townB, population=5), Town(name=townC, population=42), Town(name=townD, population=67)])=[Town(name=townA, population=4), Town(name=townB, population=5), Town(name=townC, population=42), Town(name=townD, population=67)]}}

输出:

{
 StateA=
        {
         cityA=[townA, townB, townC, townD],
         cityB=[townE, townF, townG, townH]
        }, 
 StateB={
         cityC=[townI, townJ, townK, townL], 
         cityD=[townM, townN, townO, townP]
        }
}

这篇关于Java 3级嵌套列表到3级嵌套映射的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆