我正在编写一个方法,它会返回一个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但无法这样做。
答案 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。