package com.ruoyi.common.utils; import cn.hutool.core.bean.copier.BeanCopier; import cn.hutool.core.bean.copier.CopyOptions; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ReflectUtil; import java.util.List; import java.util.stream.Collectors; /** * bean深拷è´å·¥å…· * * @author Lion Li */ public class BeanCopyUtils { /** * å•对象基于classåˆ›å»ºæ‹·è´ * * @param source æ•°æ®æ¥æºå®žä½“ * @param copyOptions copyæ¡ä»¶ * @param desc æè¿°å¯¹è±¡ 转æ¢åŽçš„对象 * @return desc */ public static <T, V> V oneCopy(T source, CopyOptions copyOptions, Class<V> desc) { V v = ReflectUtil.newInstanceIfPossible(desc); return oneCopy(source, copyOptions, v); } /** * å•å¯¹è±¡åŸºäºŽå¯¹è±¡åˆ›å»ºæ‹·è´ * * @param source æ•°æ®æ¥æºå®žä½“ * @param copyOptions copyæ¡ä»¶ * @param desc 转æ¢åŽçš„对象 * @return desc */ public static <T, V> V oneCopy(T source, CopyOptions copyOptions, V desc) { if (ObjectUtil.isNull(source)) { return null; } return BeanCopier.create(source, desc, copyOptions).copy(); } /** * 列表对象基于classåˆ›å»ºæ‹·è´ * * @param sourceList æ•°æ®æ¥æºå®žä½“列表 * @param copyOptions copyæ¡ä»¶ * @param desc æè¿°å¯¹è±¡ 转æ¢åŽçš„对象 * @return desc */ public static <T, V> List<V> listCopy(List<T> sourceList, CopyOptions copyOptions, Class<V> desc) { if (ObjectUtil.isNull(sourceList)) { return null; } if (CollUtil.isEmpty(sourceList)) { return CollUtil.newArrayList(); } return sourceList.stream() .map(source -> oneCopy(source, copyOptions, desc)) .collect(Collectors.toList()); } }