我有一个包含实体对象的列表。我想使用基于此列表的流,映射DTO上的所有实体并将此新映射列表分配给新列表。我想在流中做所有事情,但我有一个问题。
movieEntity.getCountries().stream().map(ServiceUtils::toCountryDto).findAny().ifPresent(builder::withCountries);
此代码不起作用,因为findAny ()
只返回列表中的一个对象,我想在withCountries方法的帮助下设置整个列表。怎么做?使用Builder
模式和withCountries
方法,我想从实体设置映射列表。
答案 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());