在流中打开流

0 java functional-programming java-8 java-stream

我有这段代码.我该如何改造它?功能风格?事实上,我有List<X>.每个X包含List<V>.此列表中的每个V都有List<M>一个参数.我需要构建Map<X,Y>,其中Y是存储在对象X中聚合的所有V对象中的所有M个对象的数量.

HashMap<Country, Integer> modelsPerCountryMap = new HashMap<>();
int count;
for (Country country : CountryDataSingleton.getCountryDataCollection()) {
    count = 0;
    for (CarMaker cm : country.getListOfMakers()) {
        count += cm.getModels().size();
    }
    modelsPerCountryMap.put(country, count);
}
Run Code Online (Sandbox Code Playgroud)

Mur*_*nik 5

我将这些国家/地区流式传输,然后将它们收集到地图中,其中关键字是国家/地区,价值可以是制造商尺寸的总和:

Map<Country, Integer> modelsPerCountryMap =
     CountryDataSingleton.getCountryDataCollection()
                         .stream()
                         .collect(
                             Collectors.toMap(
                                 Function.identity(),
                                 c -> c.getListOfMakers()
                                       .stream()
                                       .mapToInt(cm -> cm.getModels().size())
                                       .sum()
                              )
                         );
Run Code Online (Sandbox Code Playgroud)