MapStruct String to List映射

如何将String映射到List和List to String?

考虑一下我们跟随classess

class People{ private String primaryEmailAddress; private String secondaryEmailAddress; private List phones; //getter and setters } class PeopleTO{ private List emailAddress; private String primaryPhone; private String secondaryPhone; //getter and setters } 

在Dozer和Orika中,我们可以使用以下代码行轻松映射

 fields("primaryEmailAddress", "emailAddress[0]") fields("secondaryEmailAddress", "emailAddress[1]") fields("phones[0]", "primaryPhone") fields("phones[1]", "secondaryPhone") 

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

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

MapStruct无法直接映射到集合,但它允许您实现在映射之后运行的方法以完成该过程。 我使用了一种这样的方法将PeopleTOsecondaryPhone属性PeopleTOPeople 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()); people.getPhones().add(to.primaryPhone); people.getPhones().add(to.secondaryPhone); } } 

我可以在这里看到一些例子: https : //github.com/mapstruct/mapstruct-examples

检查此模块是否符合您的特定要求(可转换为非Iterable): https : //github.com/mapstruct/mapstruct-examples/tree/master/mapstruct-iterable-to-non-iterable

另一个在这里: http : //blog.goyello.com/2015/09/08/dont-get-lost-take-the-map-dto-survival-code/

不确定是否可以将非迭代映射到Iterable。