• BeanCopyUtil


    import com.baomidou.mybatisplus.extension.service.IService;
    import org.apache.commons.collections4.CollectionUtils;
    import org.springframework.beans.BeanUtils;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.function.Supplier;
    
    
    
    /**
     * @author
     * @date
     */
    public class BeanCopyUtil extends BeanUtils {
       private static final int ZERO = 0;
        /**
         * 集合数据的拷贝
         *
         * @param sources: 数据源类
         * @param target:  目标类::new(eg: UserVO::new)
         * @return
         */
        public static <S, T> List<T> copyListProperties(List<S> sources, Supplier<T> target) {
            return copyListProperties(sources, target, null);
        }
    
    
        /**
         * 带回调函数的集合数据的拷贝(可自定义字段拷贝规则)
         *
         * @param sources:  数据源类
         * @param target:   目标类::new(eg: UserVO::new)
         * @param callBack: 回调函数
         * @return
         */
        public static <S, T> List<T> copyListProperties(List<S> sources, Supplier<T> target, BeanCopyUtilCallBack<S, T> callBack)  {
            List<T> list = new ArrayList<>(sources.size());
            for (S source : sources) {
                T t = target.get();
                copyProperties(source, t);
                list.add(t);
                if (callBack != null) {
                    // 回调
                    callBack.callBack(source, t);
                }
            }
            return list;
        }
    
        public static void saveBatch(List list, IService iService) {
            if (CollectionUtils.isNotEmpty(list)) {
                int pageSize = 1000;
                int pageNum = 1;
                int total = list.size();
                int pages = total / pageSize;
                if (total % pageSize != ZERO) {
                    pages++;
                }
                while (pages >= pageNum) {
                    //默认1000,为什么用1000?相信应该比较合理,故我们也用1000
                    iService.saveBatch(list.subList(BeanCopyUtil.getStartIndex(pageNum, pageSize), BeanCopyUtil.getLastIndex(pageNum, pageSize, total)));
                    pageNum++;
                }
            }
        }
    
        public static void saveOrUpdateBatch(List list, IService iService) {
            if (CollectionUtils.isNotEmpty(list)) {
                int pageSize = 1000;
                int pageNum = 1;
                int total = list.size();
                
                int pages = total / pageSize;
                if (total % pageSize != ZERO) {
                    pages++;
                }
                while (pages >= pageNum) {
                    //默认1000,为什么用1000?相信应该比较合理,故我们也用1000
                    iService.saveOrUpdateBatch(list.subList(BeanCopyUtil.getStartIndex(pageNum, pageSize), BeanCopyUtil.getLastIndex(pageNum, pageSize, total)));
                    pageNum++;
                }
            }
        }
    
        /**
         * 计算集合起始位置与结束位置
         */
        public static int getStartIndex(int pageNum, int pageSize) {
            return (pageNum - 1) * pageSize;
        }
    
        public static int getLastIndex(int pageNum, int pageSize, int total) {
            int num = pageNum * pageSize;
            return Math.min(num, total);
        }
    }
    
    @FunctionalInterface
    public interface BeanCopyUtilCallBack<S, T> {
        /**
         * 定义默认回调方法
         *
         * @param t
         * @param s
         */
        void callBack(S t, T s) ;
    }
  • 相关阅读:
    Django Rest framework基础使用之Request/Response
    Django Rest framework基础使用之 serializer
    python基础(一)
    python实现本地图片上传到服务区
    开发中遇到的问题记录
    九、xadmin菜单分组管理
    leetcode-7-整数翻转
    leetcode-6-Z 字形变换
    leetcode-5-最长回文子串
    leetcode-3-无重复字符的最长子串
  • 原文地址:https://www.cnblogs.com/tiancai/p/16138904.html
Copyright © 2020-2023  润新知