实用的对象copy工具类

package com.pos.common.utils;

import org.springframework.util.CollectionUtils;

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

/**
 * notes 对象工具类
 * author xiaoming.chen
 * create 2018/11/2 0002 15:40
 **/
public class BeanUtils {

    /**
     * 通过 tClass 生成示例并且将 source 对应的字段 copy
     * @param source 源对象
     * @param tClass 期望对象类型
     * @param <S> 源对象
     * @param <T> 期望对象
     * @return 期望对象实例
     */
    public static <S,T> T copyProperties(S source, Class<T> tClass) {
        try {
            T target = tClass.newInstance();
            if (null == source) {
                return target;
            }
            org.springframework.beans.BeanUtils.copyProperties(source, target);
            return target;
        } catch (InstantiationException | IllegalAccessException e) {
            throw new RuntimeException( String.format("%s must declaring none arguments constructor!", tClass.getTypeName()));
        }
    }

    /**
     * 根据类型生成,生成转换的新列表
     *
     * @param tClass 目标列表类型
     * @param list   原列表数据
     * @param <S>    source class
     * @param <T>    target class
     * @return 目标列表
     */
    public static <S, T> List<T> assemble(Class<T> tClass, List<S> list){
        if (CollectionUtils.isEmpty(list)) {
            return new ArrayList<>();
        }
        List<T> lists=new ArrayList<>(list.size());
        for (S s : list) {
            lists.add(BeanUtils.copyProperties(s, tClass));
        }
        return lists;
    }

    /**
     * 提供源数据列表和转换规则,生成新的列表
     *
     * @param list              原列表
     * @param transferInterface 转换规则接口实现
     * @param <S>   source class
     * @param <T>   target class
     * @return 转换后的列表
     */
    public static <S, T> List<T>  assemble(List<S> list, TransferInterface<S, T> transferInterface){
        if (CollectionUtils.isEmpty(list)) {
            return new ArrayList<>();
        }
        List<T> lists=new ArrayList<>(list.size());
        for (S s : list) {
            lists.add(transferInterface.transfer(s));
        }
        return lists;
    }

    public interface TransferInterface<S, T>  {
        T transfer(S s);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值