[MapStruct]集合的映射

此篇文章对应的是官网【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<String, String> longDateMapToStringStringMap(Map<Long, Date> source);
}

public class Test {
    public static void main(String[] args) {
        Map<Long, Date> longDateMap = new HashMap<>();
        longDateMap.put(1L,new Date());
        Map<String, String> 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<String> listLongToListString(List<Long> source);
}

public class Test {
    public static void main(String[] args) {
        List<Long> longList = new ArrayList<>();
        longList.add(1L);
        List<String> 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<String> stringSetToLongSet(Set<Long> source);
}

public class Test {
    public static void main(String[] args) {
        Set<Long> longSet = new HashSet<>();
        longSet.add(1L);
        Set<String> stringSet = MapMapper.INSTANCE.stringSetToLongSet(longSet);
        System.out.println(stringSet);//[1]

    }
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值