我使用Mapstruct来处理将一个POJO映射到另一个POJO的样板代码。
这是DTO:
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
后,我使用了来自&#34;映射的CycleBreakingContext
与周期&#34;示例
@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);
该界面还包含将Attribute
映射到AttributeTO
的方法,其名称为map
。
是否有更优雅的方式来实现非可迭代Map
到Collection
的转换?我的方法很有效,但有其不足之处。例如,重构无法识别字符串中的代码片段。
答案 0 :(得分:1)
默认映射器方法怎么样?
在mapper界面中,您可以提供指示MapStruct如何映射给定类型的默认实现,例如:
default Collection<Integer> mapAttributes(Map<String, Integer> attributes) {
return attributes.values();
}
只要MapStruct尝试从Map映射到Collection,就会调用此方法。
您可以随意自定义它。