【问题标题】:Mapstruct: Map a list inside an object to a list of objectsMapstruct:将对象内部的列表映射到对象列表
【发布时间】:2019-05-29 03:17:45
【问题描述】:

给定:

public class Car {
  private String plate;
  private List<String> tires;
}

public class TirePlate {
  private String plate;
  private String tire;
}

我想将所有 Car.tires 映射到单独的 TirePlates。我知道我可以制作一个 List&lt;String&gt;List&lt;tires&gt; 的映射器,但如果我这样做了,我会失去盘子。

我怎么把盘子放进去?

【问题讨论】:

  • 只是为了让我理解这一点,您是否试图将 Car.tires 列表中的每个单独项目都添加到 TirePlates 列表中?还是您想在列表中创建哈希图?
  • 我正在尝试将 Car.tires 列表中的每个单独项目都添加到 TirePlates 列表中?
  • Car.tires 列表中的每个字符串是什么样的。
  • 我认为你应该只使用一个简单的for 并在List&lt;String&gt; tires 上运行并填充新的List&lt;TirePlate&gt;

标签: java mapstruct


【解决方案1】:

您可以做的是为列表创建一个自定义映射器,该映射器将获得plate,然后您将拥有一个从platetireTirePlate 的自定义方法映射。

例如:

@Mapper
public interface TireMapper {

    CarDto map(Car car);

    default List<TirePlate> map(List<String> tires, String plate) {
        List<TirePlate> tirePlates = new ArrayList<>(tires.size());

        for(String tire: tires) {
            tirePlates.add(map(tire, plate));
        }
        return tirePlates;
    }

    TirePlate map(String tire, String plate);
}

【讨论】:

  • “自定义方法”是指“我编写的自定义方法吗?”。所以我必须写 map(tire,plate) 方法?另外,我认为您的意思是让循环中的调用返回值进入arrayList?
  • 是的,我的意思是您需要的定制方法。是的,自定义默认方法有一些编译问题。我已经改了
猜你喜欢
  • 2019-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-12
  • 2018-01-18
  • 2013-03-11
  • 1970-01-01
相关资源
最近更新 更多