流列表,映射和设置为新列表

时间:2018-03-28 13:26:19

标签: java mapping java-stream

我有一个包含实体对象的列表。我想使用基于此列表的流,映射DTO上的所有实体并将此新映射列表分配给新列表。我想在流中做所有事情,但我有一个问题。

movieEntity.getCountries().stream().map(ServiceUtils::toCountryDto).findAny().ifPresent(builder::withCountries);

此代码不起作用,因为findAny ()只返回列表中的一个对象,我想在withCountries方法的帮助下设置整个列表。怎么做?使用Builder模式和withCountries方法,我想从实体设置映射列表。

1 个答案:

答案 0 :(得分:4)

你不应该使用findAny。您应该使用另一个map()ServiceUtils::toCountryDto生成的实例转换为builder::withCountries生成的实例,然后收集到List(或其他一些集合):

List<OutputClass> output = 
    movieEntity.getCountries()
               .stream()
               .map(ServiceUtils::toCountryDto)
               .map(builder::withCountries)
               .collect(Collectors.toList());

如果我误解了您的目标,builder::withCountries应该对ServiceUtils::toCountryDto生成的每个实例应用操作(不返回输出),请使用forEach

movieEntity.getCountries()
           .stream()
           .map(ServiceUtils::toCountryDto)
           .forEach(builder::withCountries);

编辑:根据您的评论,您希望将List的所有元素Stream传递给withCountries方法。这可以通过将Stream收集到List并将List传递给该方法来完成:

builder.withCountries(movieEntity.getCountries().stream().map(ServiceUtils::toCountryDto).collect(Collectors.toList());