首页 > 编程语言 >java的两个bean之间复制属性,所有属性中替换某几个字符

java的两个bean之间复制属性,所有属性中替换某几个字符

时间:2024-04-13 09:03:00浏览次数:21  
标签:java target List param source bean replaceChars 属性

以下是实现代码:

import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.BeanUtils;

public class BeanCopyUtil {

    /**
     * 复制bean属性
     * 
     * @param source 源bean
     * @param target 目标bean
     * @param replaceChars 需要替换的字符列表
     */
    public static void copyProperties(Object source, Object target, List<String> replaceChars) {
        BeanUtils.copyProperties(source, target);
        if (replaceChars != null && !replaceChars.isEmpty()) {
            PropertyDescriptor[] sourcePds = BeanUtils.getPropertyDescriptors(source.getClass());
            PropertyDescriptor[] targetPds = BeanUtils.getPropertyDescriptors(target.getClass());
            for (PropertyDescriptor sourcePd : sourcePds) {
                if (sourcePd.getReadMethod() != null) {
                    for (PropertyDescriptor targetPd : targetPds) {
                        if (targetPd.getWriteMethod() != null && sourcePd.getName().equals(targetPd.getName())) {
                            try {
                                Object sourceValue = sourcePd.getReadMethod().invoke(source);
                                if (sourceValue != null && sourceValue instanceof String) {
                                    String targetValue = (String) sourceValue;
                                    for (String replaceChar : replaceChars) {
                                        targetValue = targetValue.replace(replaceChar, "");
                                    }
                                    targetPd.getWriteMethod().invoke(target, targetValue);
                                } else {
                                    targetPd.getWriteMethod().invoke(target, sourceValue);
                                }
                            } catch (IllegalAccessException | IllegalArgumentException
                                    | InvocationTargetException e) {
                                e.printStackTrace();
                            }
                            break;
                        }
                    }
                }
            }
        }
    }

    /**
     * 复制bean属性
     * 
     * @param source 源bean
     * @param targetClass 目标bean的class
     * @param replaceChars 需要替换的字符列表
     * @return 目标bean
     */
    public static <T> T copyProperties(Object source, Class<T> targetClass, List<String> replaceChars) {
        T target = null;
        try {
            target = targetClass.newInstance();
        } catch (InstantiationException | IllegalAccessException e) {
            e.printStackTrace();
        }
        copyProperties(source, target, replaceChars);
        return target;
    }

    /**
     * 复制bean属性
     * 
     * @param sourceList 源bean列表
     * @param targetClass 目标bean的class
     * @param replaceChars 需要替换的字符列表
     * @return 目标bean列表
     */
    public static <T> List<T> copyProperties(List<?> sourceList, Class<T> targetClass, List<String> replaceChars) {
        List<T> targetList = new ArrayList<>();
        for (Object source : sourceList) {
            T target = copyProperties(source, targetClass, replaceChars);
            targetList.add(target);
        }
        return targetList;
    }
}

使用示例:

public class Test {
    public static void main(String[] args) {
        // 复制单个bean属性
        User source = new User();
        source.setId(1L);
        source.setName("Tom");
        source.setAge(20);
        User target = new User();
        BeanCopyUtil.copyProperties(source, target, Arrays.asList("o"));
        System.out.println(target.getId()); // 1
        System.out.println(target.getName()); // Tm
        System.out.println(target.getAge()); // 20

        // 复制bean列表属性
        List<User> sourceList = new ArrayList<>();
        sourceList.add(source);
        List<UserVO> targetList = BeanCopyUtil.copyProperties(sourceList, UserVO.class, Arrays.asList("o"));
        System.out.println(targetList.get(0).getId()); // 1
        System.out.println(targetList.get(0).getName()); // Tm
        System.out.println(targetList.get(0).getAge()); // 20
    }
}

class User {
    private Long id;
    private String name;
    private Integer age;
    // 省略getter和setter方法
}

class UserVO {
    private Long id;
    private String name;
    private Integer age;
    // 省略getter和setter方法
}

标签:java,target,List,param,source,bean,replaceChars,属性
From: https://www.cnblogs.com/bigleft/p/18132472

相关文章

  • 在Windows安装javaSE8
    1.下载安装官网Java1.8_31.zip2.配置环境变量创建.bat文件,写入以下内容后执行。自动配置环境变量@echooff%1mshtavbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c%~s0::","","runas",1)(window.close)&&exit......
  • JAVA 板子
    代码片段1importjava.io.BufferedReader;importjava.io.BufferedWriter;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.OutputStreamWriter;importjava.io.PrintWriter;importjava.io.StreamTokenizer;publicclassMain{stati......
  • java代码审计-sqli
    Java代码审计-sqli0x01漏洞挖掘jdbc在上古时期,人们往往这么从数据库获取数据。publicUsergetUserById(Stringid)throwsSQLException{Connectionconnection=JDBCTOOLS.getConnection(); Stringsql="selectid,usernamefromuserwhereid="+id; State......
  • java代码审计-反序列化
    Java代码审计-反序列化0x00漏洞挖掘业务代码简单来说,找readObject/readUnshared就好了protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{StringbaseStr=request.getParameter("str");b......
  • Java基础知识篇02——封装
    大家好,我是白夜,今天给大家聊聊面向对象的三大特征——封装一、包(package)1.1、包的引入先来看看我们之前写的代码结构以上代码存在的问题所有类写在一个目录下面,非常难管理,因为以后项目不可能只有这么几个类,当类数量很大的时候,就不容易管理了。不能写同名但是不同需求的类......
  • Java如何自行实现正向地理编码算法(不依赖api,不联网)
    政务场景中经常会遇到地址落图,或者三维挂接的场景。如何将文本地址转化为gps坐标是实现要解决的核心问题。addresstool为正向地理编码提供了非常简单、高效的算法。如何实现正向地理编码,只需要3步就行:第一步:带有坐标的标准地址加载到addresstool中。第二部:以业务地址作为参数,使......
  • java 怎么把负数变正数
    java怎么把负数变正数Java中将负数变为正数可以通过以下几种方式实现:使用绝对值函数、使用三目运算符、使用位运算或者使用移位运算。下面将详细介绍这些方法。1.使用绝对值函数Java提供了Math类中的abs()方法,可以返回一个数的绝对值。使用该方法可以将负数转换为正数......
  • java中cron表达式 每10分钟执行一次
    在Java中,可以使用Quartz框架来定义和调度任务,包括使用Cron表达式来定义任务的执行时间。下面是一个使用Quartz框架实现每10分钟执行一次任务的示例:添加Quartz依赖在Maven项目中,添加以下依赖到pom.xml文件中:<dependency><groupId>org.quartz-scheduler</groupId><arti......
  • bug记录:java.lang.UnsupportedOperationException: null
    java.lang.UnsupportedOperationException:null这个错一般是因为不支持的操作导致,即对象不支持某方法,显示抛出此异常。举个例子:Arrays.asList这个方法返回Arrays内部类ArrayList而不是java.util.ArrayList,而Arrays的内部类ArrayList是继承了AbstractList,AbstractList中的add、r......
  • Java策略模式实践
    1什么是策略模式策略模式(StrategyPattern):一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。在策略模式定义了一系列算法或策略,并将每个算法封装在独立的类中,使得它们可以互相替换。通过使用策略模式,可以在运行时根据需要选择不同的算法,而不需要修改......