java 如何从lambda表达式中收集列表[重复]

6ovsh4lw  于 2023-06-04  发布在  Java
关注(0)|答案(3)|浏览(97)

此问题已在此处有答案

How can I turn a List of Lists into a List in Java 8?(12个回答)
6年前关闭。
我写了一个方法,将返回一个列表的区域数据,我这样做的方式,但得到错误

@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>

在线regionData = countriesIso.stream().map(c->i18nFacade.getRegionsForCountryIso(c)).collect(Collectors.toList());
函数i18nFacade.getRegionsForCountryIso(c)返回一个区域数据列表,我想将这些列表合并为一个列表。我尝试了lambda,但没有成功。

gkn4icbw

gkn4icbw1#

你需要在stream中使用flatMap。

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

j2cgzkjk2#

使用flatMap
返回一个流,该流由将此流的每个元素替换为Map流的内容的结果组成,该Map流是通过将提供的Map函数应用于每个元素而生成的。

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

cwxwcias3#

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

相关问题