Java MapStruct字符串到列表映射

Java MapStruct字符串到列表映射,java,mapping,mapstruct,Java,Mapping,Mapstruct,如何将字符串映射到列表,并将列表映射到字符串 假设我们有下面的班级 class People{ private String primaryEmailAddress; private String secondaryEmailAddress; private List<String> phones; //getter and setters } class PeopleTO{ private List<String> emailA

如何将字符串映射到列表,并将列表映射到字符串

假设我们有下面的班级

class People{
    private String primaryEmailAddress;
    private String secondaryEmailAddress;
    private List<String> phones;
    //getter and setters
}

class PeopleTO{
    private List<String> emailAddress;
    private String primaryPhone;
    private String secondaryPhone;
    //getter and setters
}

如何在MapStruct中执行相同类型的映射?在哪里可以找到有关mapstruct的更多示例?

我可以在这里看到一些示例:

根据您的具体需求检查本模块(可测试到不可测试):

这里还有一个:


不确定是否可以将不可iterable映射到可iterable。

下面的示例将
PeopleTO
中的
emailAddress
列表中的元素映射到
primarydemailaddress
secondarydemailaddress
属性中

MapStruct不能直接映射到集合中,但它允许您实现在映射后运行的方法来完成该过程。我使用了这样一种方法将
PeopleTO
primaryPhone
secondaryPhone
属性映射到
People
中的
phones
列表的元素中

abstract class Mapper {
    @Mappings({
        @Mapping(target="primaryEmailAddress", expression="emailAddress != null && emailAdress.size() >= 1 ? emailAdresses.get(0) : null"),
        @Mapping(target="secondaryEmailAddress", expression="emailAddress != null && emailAdress.size() >= 2 ? emailAdresses.get(1) : null"),
        @Mapping(target="phones", ignore=true)
    })
    protected abstract People getPeople(PeopleTO to);

    @AfterMapping
    protected void setPhones(PeopleTO to, @MappingTarget People people) {
        people.setPhones(new List<String>());
        people.getPhones().add(to.primaryPhone);
        people.getPhones().add(to.secondaryPhone);
    }
}
抽象类映射器{
@映射({
@映射(target=“primaryEmailAddress”,expression=“emailAddress!=null&&emailAddress.size()>=1?EmailAddresss.get(0):null”),
@映射(target=“secondaryEmailAddress”,expression=“emailAddress!=null&&emailAddress.size()>=2?EmailAddresss.get(1):null”),
@映射(target=“phones”,ignore=true)
})
受保护的抽象人物getPeople(PeopleTO);
@后映射
受保护的无效设置电话(PeopleTO、@MappingTarget People){
people.setPhones(新列表());
people.getPhone().add(到.primaryPhone);
people.getPhone().add(到.secondaryPhone);
}
}

一个字符串映射到列表是可行的,但我想将主要和次要电子邮件地址映射到电子邮件地址列表,当我这样做时,它会抛出无法映射的相同字段
abstract class Mapper {
    @Mappings({
        @Mapping(target="primaryEmailAddress", expression="emailAddress != null && emailAdress.size() >= 1 ? emailAdresses.get(0) : null"),
        @Mapping(target="secondaryEmailAddress", expression="emailAddress != null && emailAdress.size() >= 2 ? emailAdresses.get(1) : null"),
        @Mapping(target="phones", ignore=true)
    })
    protected abstract People getPeople(PeopleTO to);

    @AfterMapping
    protected void setPhones(PeopleTO to, @MappingTarget People people) {
        people.setPhones(new List<String>());
        people.getPhones().add(to.primaryPhone);
        people.getPhones().add(to.secondaryPhone);
    }
}