复制集合与对象

开发过程中,总会涉及到一些BO、PO、DTO、VO等转换, 比如userVO转换成userPO。自己写个转换方法如下

private UserPO converterUser(UserVO user) {
   UserPO userPO = new UserPO();
   userPO.setId(user.getId());
   // add more feild...
   return userPO;
}

这个是最原始也是最费劲的,某个字段不小心写错了还成就了一个bug。但有些jar包里面有现成的方法可以直接使用, 比如spring-beans包里面的BeanUtils.copyProperties(source,target); 源码如下
复制集合与对象_第1张图片
故此写出工具类如下

package com.yulisao.utils;


import org.springframework.beans.BeanUtils;
import org.springframework.util.CollectionUtils;

import java.util.ArrayList;
import java.util.List;

public class ConverterUtil {

    /**
     * 复制对象
     */
    public static <T,K> T convert(K source, Class<T> clazz) {
        T t = BeanUtils.instantiate(clazz);
        BeanUtils.copyProperties(source, t);
        return t;
    }

    /**
     * 复制集合
     */
    public static <T,K> List<T> convertList(List<K> sourceList, Class<T> clazz) {
        if (CollectionUtils.isEmpty(sourceList)) {
            return null;
        }

        ArrayList<T> target = new ArrayList<>();
        sourceList.forEach(k -> target.add(convert(k, clazz)));
        return target;
    }
}

调用示例如下

public static void main(String[] args) {
        UserVO vo = new UserVO(); // 实际中从数据库查询得到数据
        UserPO po = ConverterUtil.convert(vo, UserPO.class); // 进行转换,最好先判vo是否空
        
        List<UserVO> voList = new ArrayList<>(); // 实际中从数据库查询得到数据
        List<UserPO> poList = ConverterUtil.convertList(voList, UserPO.class); // 进行转换,最好先判voList是否空
    }

两个入参分别是 源对象/源对象集合 目标对象.class

你可能感兴趣的:(工具类,java)