• [MapStruct]集合的映射


    此篇文章对应的是官网【Mapping maps】部分

    MapStruct除了实例中属性的映射外,还可以对集合进行相关的映射。下面进行详细说明。

    1. map的映射

    当想把你个map中的内容给另外一个map时,就可以通过MapStruct来完成,也就是本节的map映射。方法想当简单,所以先上代码,在做说明:

    1. @Mapper
    2. public interface MapMapper {
    3. MapMapper INSTANCE = Mappers.getMapper(MapMapper.class );
    4. @MapMapping(valueDateFormat = "dd.MM.yyyy")
    5. Map longDateMapToStringStringMap(Map source);
    6. }
    7. public class Test {
    8. public static void main(String[] args) {
    9. Map longDateMap = new HashMap<>();
    10. longDateMap.put(1L,new Date());
    11. Map stringDateMap = MapMapper.INSTANCE.longDateMapToStringStringMap(longDateMap);
    12. System.out.println(stringDateMap); //{1=24.08.2022}
    13. }
    14. }

    可以看到,代码很少,很简单。都省去了类,只需要一个Mapper即可。当Mapper中方法的参数和返回值都是Map时,MapStruct就可以给我们进行转换。

    原理就是:遍历参数的map中的key和value然后转换成返回值中对应的key和value的类型。具体大家可以看这个Mapper的实现类就明白了。

    说一下注解中valueDateFormat的作用:这个属性当在map之间映射时,当map中的value是Date类型时,要转换为String类型时,就可以用这个属性,这个属性会通过一个SimpleDateFormat类来格式化日期。

    2. List的映射

    list相互之间的映射,更加简单,我直接上代码

    1. @Mapper
    2. public interface MapMapper {
    3. MapMapper INSTANCE = Mappers.getMapper(MapMapper.class );
    4. List listLongToListString(List source);
    5. }
    6. public class Test {
    7. public static void main(String[] args) {
    8. List longList = new ArrayList<>();
    9. longList.add(1L);
    10. List stringList = MapMapper.INSTANCE.listLongToListString(longList);
    11. System.out.println(stringList);//[1]
    12. }
    13. }

     看到了吧,只需要在Mapper中简简单单写一个接口,我们就可以将一个list转换为另外一个list了。

    3. Set的映射

    同样直接上代码了,因为太简单了

    1. @Mapper
    2. public interface MapMapper {
    3. MapMapper INSTANCE = Mappers.getMapper(MapMapper.class );
    4. Set stringSetToLongSet(Set source);
    5. }
    6. public class Test {
    7. public static void main(String[] args) {
    8. Set longSet = new HashSet<>();
    9. longSet.add(1L);
    10. Set stringSet = MapMapper.INSTANCE.stringSetToLongSet(longSet);
    11. System.out.println(stringSet);//[1]
    12. }
    13. }

    通过这三个例子,应该就明白了集合之间的映射的用法了。

  • 相关阅读:
    即时通讯开发技术--iOS Push技术分享帖
    Elementui使用resetFields不生效解决方案
    [iOS]-UIKit
    解题报告 之 SOJ3353 Total Flow
    11.循环神经网络RNN
    Python爬虫之简单学习BeautifulSoup库,学习获取的对象常用方法,实战豆瓣Top250
    neo4j mongoDB Hbase简单了解
    stream流操作,获取List 集合中某一字段并求和
    【进阶C语言】排序函数(qsort)与模拟实现(回调函数的实例)
    【PAT乙级】1015 德才论
  • 原文地址:https://blog.csdn.net/liuhaibo_ljf/article/details/126498766