【问题标题】:Mapstruct - mapping from multiple collections into a single collectionMapstruct - 从多个集合映射到单个集合
【发布时间】:2018-10-19 05:15:01
【问题描述】:

使用 MapStruct,我的源对象中有两个集合,其中包含略有不同的对象。我想将这两个集合的对象映射为一个通用类型,然后将它们全部插入一个集合中。类似于以下内容:

List<UserNumber> listsToDtoList(List<PhoneNumber> phoneNumbers, List<FaxNumber> faxNumbers);

UserNumber phoneToPhoneDto(PhoneNumber phone);
UserNumber faxToPhoneDto(FaxNumber fax);

使用 MapStruct 最简单的方法是什么?

【问题讨论】:

    标签: java mapstruct


    【解决方案1】:

    所以我会从我的SourceObject 进行映射(而不是写List&lt;UserNumber&gt; listsToDtoList(List&lt;PhoneNumber&gt; phoneNumbers, List&lt;FaxNumber&gt; faxNumbers);

    大意是这样的:

    @Mapping( target = "userNumbers", source = "phoneNumbers" )
    Target map( Source source );
    
    @AfterMapping // will be applied in the final part of the previous method
    default void map ( Source source, @MappingTarget Target target ) {
     target.getUserNumbers().addAll(source.getFaxNumbers());
    }
    

    【讨论】:

    • 这很接近 - 但在添加传真号码之前,在目标集合上生成的代码称为 .clear()。现在我使用了@AfterMapping,但是使用了一个自定义方法,它只是将传真号码添加到目标集合中。如果您对如何使用您的解决方案有任何建议,但要防止现有集合被清除,我很想听听!
    • 嗯。忘记了..暂时这是唯一的选择。请留意这个issue。请添加评论或支持该问题。我会调整我的答案以反映您的解决方案。
    猜你喜欢
    • 2021-05-18
    • 2018-03-30
    • 2021-12-18
    • 2018-10-05
    • 1970-01-01
    • 1970-01-01
    • 2021-02-14
    • 2018-01-30
    • 2021-12-11
    相关资源
    最近更新 更多