代码之家  ›  专栏  ›  技术社区  ›  user212926

使用Mapstruct将集合映射到Map,反之亦然

  •  1
  • user212926  · 技术社区  · 8 年前

    import java.util.Collection;
    
    public class TestTO {
        String name;
        Collection<AttributeTO> attributes;
    }
    

    以下是映射的POJO:

    import java.util.Map;
    
    public class Test {
        String name;
        Map<String, Attribute> attributes;
    }
    

    Map Collection . 目前,我正在使用 expression 的属性 @Mapping 注释。自从 Attribute Test 我正在使用 CycleBreakingContext 来自“周期映射”示例。

    @Mapping(target = "attributes", expression = "java(test.getAttributes().values().stream().map(a -> this.map(a, context)).collect(java.util.stream.Collectors.toList()))")
    abstract TestTO map(Test test, @Context CycleBreakingContext context);
    

    属性 AttributeTO map .

    有没有更优雅的方法来实现非iterable的这种转换 地图 到a ? 我的方法可行,但也有缺点。例如,重构不能识别字符串中的代码片段。

    1 回复  |  直到 8 年前
        1
  •  1
  •   Patryk Krawczyk    8 年前

    默认映射器方法如何?

    在mapper界面中,您可以提供默认实现,指示MapStruct如何映射给定类型,例如:

    default Collection<Integer> mapAttributes(Map<String, Integer> attributes) {
        return attributes.values();
    }
    

    您可以根据需要自由定制。