如何从lambda表达式中收集列表

时间:2016-12-14 05:40:47

标签: java java-8 java-stream

我正在编写一个方法,它会返回一个regiondata列表,我正在按以下方式进行但是收到错误

@Override
    public List<RegionData> getAllRegionsForDeliveryCountries()
    {
        final List<RegionData> regionData = new ArrayList<>();
        final List<String> countriesIso = getCountryService().getDeliveryCountriesIso();
        regionData = countriesIso.stream().map(c->i18nFacade.getRegionsForCountryIso(c)).collect(Collectors.toList());
        return regionData;
    }

我收到错误

type mismatch: cannot convert from List<List<RegionData>> to List<RegionData>

on line regionData = countriesIso.stream()。map(c-&gt; i18nFacade.getRegionsForCountryIso(c))。collect(Collectors.toList());

函数i18nFacade.getRegionsForCountryIso(c)返回一个区域数据列表,我想将这些列表组合成单个列表。 我尝试使用lambda但无法这样做。

3 个答案:

答案 0 :(得分:7)

您需要将flatMap与流一起使用。 regionData = countriesIso.stream().flatMap(c -> i18nFacade.getRegionsForCountryIso(c).stream()).collect(Collectors.toList());

答案 1 :(得分:3)

使用flatMap

  

返回由替换每个元素的结果组成的流   此流的内容是由生成的映射流的内容   将提供的映射函数应用于每个元素。

regionData = countriesIso
               .stream()
               .flatMap(c -> i18nFacade.getRegionsForCountryIso(c)
               .stream())
               .collect(Collectors.toList());

答案 2 :(得分:1)

您希望使用Stream#flatMap而不是Stream#map。