此篇文章对应的是官网【Mapping maps】部分
MapStruct除了实例中属性的映射外,还可以对集合进行相关的映射。下面进行详细说明。
1. map的映射
当想把你个map中的内容给另外一个map时,就可以通过MapStruct来完成,也就是本节的map映射。方法想当简单,所以先上代码,在做说明:
- @Mapper
- public interface MapMapper {
- MapMapper INSTANCE = Mappers.getMapper(MapMapper.class );
- @MapMapping(valueDateFormat = "dd.MM.yyyy")
- Map
longDateMapToStringStringMap(Map source) ; - }
-
- public class Test {
- public static void main(String[] args) {
- Map
longDateMap = new HashMap<>(); - longDateMap.put(1L,new Date());
- Map
stringDateMap = MapMapper.INSTANCE.longDateMapToStringStringMap(longDateMap); - System.out.println(stringDateMap); //{1=24.08.2022}
- }
- }
可以看到,代码很少,很简单。都省去了类,只需要一个Mapper即可。当Mapper中方法的参数和返回值都是Map时,MapStruct就可以给我们进行转换。
原理就是:遍历参数的map中的key和value然后转换成返回值中对应的key和value的类型。具体大家可以看这个Mapper的实现类就明白了。
说一下注解中valueDateFormat的作用:这个属性当在map之间映射时,当map中的value是Date类型时,要转换为String类型时,就可以用这个属性,这个属性会通过一个SimpleDateFormat类来格式化日期。
2. List的映射
list相互之间的映射,更加简单,我直接上代码
- @Mapper
- public interface MapMapper {
- MapMapper INSTANCE = Mappers.getMapper(MapMapper.class );
- List
listLongToListString(List source) ; - }
-
- public class Test {
- public static void main(String[] args) {
- List
longList = new ArrayList<>(); - longList.add(1L);
- List
stringList = MapMapper.INSTANCE.listLongToListString(longList); - System.out.println(stringList);//[1]
- }
- }
看到了吧,只需要在Mapper中简简单单写一个接口,我们就可以将一个list转换为另外一个list了。
3. Set的映射
同样直接上代码了,因为太简单了
- @Mapper
- public interface MapMapper {
- MapMapper INSTANCE = Mappers.getMapper(MapMapper.class );
-
- Set
stringSetToLongSet(Set source) ; - }
-
- public class Test {
- public static void main(String[] args) {
- Set
longSet = new HashSet<>(); - longSet.add(1L);
- Set
stringSet = MapMapper.INSTANCE.stringSetToLongSet(longSet); - System.out.println(stringSet);//[1]
-
- }
- }
通过这三个例子,应该就明白了集合之间的映射的用法了。