【问题标题】:Stream list, mapping and setting as a new list流列表,映射和设置为新列表
【发布时间】:2018-09-07 05:13:58
【问题描述】:

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

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

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

【问题讨论】:

  • 不清楚 - 你为什么要使用findAny()

标签: java mapping java-stream


【解决方案1】:

你不应该使用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);

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

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

【讨论】:

  • builder::withCountries 似乎是Consumer&lt;CountryDto&gt;,你不能用那个map...
  • @daniu 我可能误解了。进行编辑以防万一。
  • 一种方式:我不想返回列表。 2方式:该方法只接受列表这是来自模式pastebin.com/AwdA60R1的方法对于一个对象,我会这样做movieEntity.getRating().ifPresent(builder::withRating);但我不知道如何将整个列表发送到流。
  • 获取国家/地区。映射到 DTO 。设置为列表 wthCountries(列出国家/地区)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-10
  • 2017-09-22
  • 1970-01-01
相关资源
最近更新 更多