ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

List数据拷贝,支持自定义lambda语句

2022-07-05 16:32:09  阅读:143  来源: 互联网

标签:return target 自定义 sources List param source callBack lambda


解决拷贝List数据问题,简化代码

一、无lambda语句

原代码

for (S source : sources) {
    T target = new T();
    copyProperties(source, target);
    list.add(target);
}

简化后

BeanConvertUtils.converToList(sources, T::new)

 二、自定义lambda语句

原代码

for (S source : sources) {
    T target = new T();
    copyProperties(source, target);
    target.setxxx(source.getxxx());
    list.add(target);
}

简化后

BeanConvertUtils.converToList(sources, T::new,(s, t) -> t.setxxx(s.getxxx()));

 

三、工具代码

package com.mars.otn.util;

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

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.function.Supplier;

/**
 * @author: 
 * @date: 2022/6/23
 * @description: 数据拷贝,支持自定义lambda
 */
public class BeanConvertUtils extends BeanUtils {


    /**
     * @param source   源对象
     * @param target  目标对象
     * @return {@link T}目标对象
     */
    public static <S, T> T convertTo(S source, Supplier<T> target) {
        return convertTo(source, target, null);
    }

    /**
     * 转换对象
     *
     * @param source         源对象
     * @param target 目标对象
     * @param callBack       回调方法
     * @param <S>            源对象类型
     * @param <T>            目标对象类型
     * @return {@link T}     目标对象
     */
    public static <S, T> T convertTo(S source, Supplier<T> target, ConvertCallBack<S, T> callBack) {
        if (null == source || null == target) {
            return null;
        }
        T targetOut = target.get();
        copyProperties(source, targetOut);
        if (callBack != null) {
            callBack.callBack(source, targetOut);
        }
        return targetOut;
    }

    /**
     * @param sources   源对象
     * @param target   目标对象
     * @return {@link List} 目标对象list
     */
    public static <S, T> List<T> convertListTo(List<S> sources, Supplier<T> target) {
        return convertListTo(sources, target, null);
    }

    /**
     * 转换对象
     *
     * @param sources        源对象list
     * @param target 目标对象供应方
     * @param callBack       回调方法
     * @param <S>            源对象类型
     * @param <T>            目标对象类型
     * @return {@link List}  目标对象list
     */
    public static <S, T> List<T> convertListTo(List<S> sources, Supplier<T> target, ConvertCallBack<S, T> callBack) {
        if (CollectionUtils.isEmpty(sources) || null == target) {
            return Collections.emptyList();
        }
        List<T> list = new ArrayList<>(sources.size());
        for (S source : sources) {
            T targetOut = target.get();
            copyProperties(source, targetOut);
            if (callBack != null) {
                callBack.callBack(source, targetOut);
            }
            list.add(targetOut);
        }
        return list;
    }

    /**
     * 回调接口
     *
     * @param <S> 源对象类型
     * @param <T> 目标对象类型
     */
    @FunctionalInterface
    public interface ConvertCallBack<S, T> {
        void callBack(S t, T s);
    }
}

 

标签:return,target,自定义,sources,List,param,source,callBack,lambda
来源: https://www.cnblogs.com/lhq1996/p/16446939.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有