点击关注公众号,利用碎片时间学习

工作中,经常使用Spring的工具类BeanUtils.copyProperties对bean属性进行复制,这里的复制属于浅复制。且不能复制集合和数组。

本文会对该工具进行一些测试。文末会提出复制集合属性的解决方案。

准备工作:准备测试需要的类

@Data
public class Class {private People[] member;private People teacher;private List<People> student;
}@Data
@NoArgsConstructor
@AllArgsConstructor
public class People {private Integer id;private String name;private Integer age;private Integer sex;
}

测试代码:测试BeanUtils.copyProperties是否支持复制数组和集合,还有解决方案

public static void main(String[] args) {// 测试数组的复制People[] member = new People[3];member[0] = new People(1, "老师", 30, 1);member[1] = new People(2, "班长", 15, 1);member[2] = new People(3, "学生", 15, 1);People[] member1 = new People[]{};BeanUtils.copyProperties(member, member1);System.out.println("是否可以复制数组:" + (member1.length == 0 ? false : true));// 测试List的复制(Map也不能复制,测试略)List<People> student = new ArrayList<>();student.add(member[1]);student.add(member[2]);List<People> student1 = new ArrayList<>();BeanUtils.copyProperties(student, student1);System.out.println("BeanUtils.copyProperties是否可以复制List:" + (student1.isEmpty() ? false : true));// 通过JSON工具实现List的复制(不仅仅是List,数组和Map等也可以通过类似方法实现复制,需要有无参构造方法,否则报错)student1 = JSON.parseArray(JSON.toJSONString(student), People.class);System.out.println("通过JSON工具复制List:" + student1);System.out.println("通过JSON工具是否深复制:" + (student.get(0) != student1.get(0) ? true : false));// 测试是否深复制Class source = new Class();source.setMember(member);source.setTeacher(member[0]);source.setStudent(student);Class target = new Class();BeanUtils.copyProperties(source, target);System.out.println("BeanUtils.copyProperties是否深复制:" + (source.getMember() != target.getMember() ? true : false));
}

测试结果

是否可以复制数组:false
BeanUtils.copyProperties是否可以复制List:false
通过JSON工具复制List:[People(id=2, name=班长, age=15, sex=1), People(id=3, name=学生, age=15, sex=1)]
通过JSON工具是否深复制:true
BeanUtils.copyProperties是否深复制:false

针对List的复制除了通过JSON工具,最简单的就是循环复制集合属性,下面测试两种方法的效率。

public static void main(String[] args) {int count = 1;System.out.println("测试数据长度:" + count);List<People> source = new LinkedList<>();List<People> target = new LinkedList<>();long start;for (int i = 0; i < count; i++) {source.add(new People(1, "ly", 25, 1));}start = System.nanoTime();target = JSON.parseArray(JSON.toJSONString(source), People.class);System.out.println("JSON:" + (System.nanoTime() - start));start = System.nanoTime();for (int i = 0; i < count; i++) {People p = new People();BeanUtils.copyProperties(source.get(i), p);target.add(p);}System.out.println("BeanUtils.copyProperties" + (System.nanoTime() - start));
}

分别测试count=1、10、100、1000、10000、100000的结果。为了防止一起执行出现影响,每次只测试一种复制方法的一种情况,共执行12次。通过对比可以知道,通过JSON复制属性快于BeanUtils,

测试数据长度:1
JSON:154767336
Bean:275182853
测试数据长度:10
JSON:165678435
Bean:275301421
测试数据长度:100
JSON:167937206
Bean:328461161
测试数据长度:1000
JSON:187832969
Bean:315815289
测试数据长度:10000
JSON:297461312
Bean:362763360
测试数据长度:100000
JSON:562035707
Bean:5815319343

通过以下方式解决复制List、Map

public static <T> List copyList(List<T> list) {if (CollectionUtils.isEmpty(list)) {return new ArrayList();}return JSON.parseArray(JSON.toJSONString(list), list.get(0).getClass());
}public static Map<String, Object> copyMap(Map map) {return JSON.parseObject(JSON.toJSONString(map));
}

(感谢阅读,希望对你所有帮助)

来源:blog.csdn.net/weixin_38229356/

article/details/81396572

推荐好文

强大,10k+点赞的 SpringBoot 后台管理系统竟然出了详细教程!

分享一套基于SpringBoot和Vue的企业级中后台开源项目,代码很规范!

能挣钱的,开源 SpringBoot 商城系统,功能超全,超漂亮

BeanUtils.copyProperties不支持复制集合的解决方案相关推荐

  1. 把javabean复制到另一个javabean 使用BeanUtils.copyProperties(a,b) 复制

    该方法对于两种不同的jar包有两种不同的意义 ,a,b通常是两个结构相似的javabean,注意:a,b里的定义类型名称必须一致才能复制 引用的是org.springframework.beans 则 ...

  2. BeanUtils.copyProperties无法复制集合问题解决

    工作中,经常使用Spring的工具类BeanUtils.copyProperties对bean属性进行复制,这里的复制属于浅复制.不能复制集合和数组. 两种方案: 一.循环里面使用BeanUtils. ...

  3. java对象复制到另一个对象中_spring: beanutils.copyproperties将一个对象的数据塞入到另一个对象中(合并对象)...

    spring: beanutils.copyproperties将一个对象的数据塞入到另一个对象中(合并对象) 它的出现原因: BeanUtils提供对Java反射和自省API的包装.其主要目的是利用 ...

  4. 使用org.springframework.beans.BeanUtils..copyProperties(sourse, target)方法复制属性

    使用org.springframework.beans.BeanUtils..copyProperties()方法进行copy两个类的属性. 注意: 1.源类Sourse中的属性需有get方法: 2. ...

  5. 利用BeanUtils在对象间复制属性

    commons-beanutils是jakarta commons子项目中的一个软件包,其主要目的是利用反射机制对JavaBean的属性进行处理.我们知道,一个JavaBean通常包含了大量的属性,很 ...

  6. BeanUtils.copyProperties与PropertyUtils.copyProperties用法及区别

    转自:http://www.cnblogs.com/fayf/articles/1272982.html 一.简介:BeanUtils提供对Java反射和自省API的包装.其主要目的是利用反射机制对J ...

  7. BeanUtils.copyProperties() 用法

    转载自 https://blog.csdn.net/jdjdndhj/article/details/62056137 第一步: BeanUtils.copyProperties()与Property ...

  8. 关于BeanUtils.copyProperties的用法和优缺点

    一.简介:  BeanUtils提供对Java反射和自省API的包装.其主要目的是利用反射机制对JavaBean的属性进行处理.我们知道,一个JavaBean通常包含了大量的属性,很多情况下,对Jav ...

  9. BeanUtils.copyProperties使用

    BeanUtils提供对Java反射和自省API的包装.其主要目的是利用反射机制对JavaBean的属性进行处理.我们知道,一个JavaBean通常包含了大量的属性,很多情况下,对JavaBean的处 ...

  10. 使用BeanUtils.copyProperties进行对象之间的属性赋值

    1.使用org.springframework.beans.BeanUtils.copyProperties方法进行对象之间属性的赋值,避免通过get.set方法一个一个属性的赋值 /*** 对象属性 ...

最新文章

  1. 全中国一共有多少IP地址?
  2. 优化tableView性能(针对滑动时出现卡的现象)
  3. Innumerable Ancestors 尺取 dfs序 lca
  4. MFC应用程序框架入门
  5. DevExpress作为企业赞助商加入.NET基金会
  6. 微信小程序点击复制文本到剪切板,获取剪切板内容
  7. 谈谈物联网产业4G转型中的隐忧与应对
  8. DETR代码学习笔记(二)
  9. Android 系统签名(踩坑记)
  10. 2020年中国地质灾害和地震发生数量、受灾人数和经济损失现状,防护和治理至关重要「图」
  11. c程序设计第五版谭浩强课后答案 第四章习题答案
  12. 7-32 哥尼斯堡的“七桥问题”
  13. windows多显示器任务栏设置:拖动窗口后任务栏显示在对应的显示器上
  14. VisualAge使用技巧(二)
  15. 传统大地测量数字考点
  16. 图片缩略图,CMYK图片变红问题解决
  17. OpenWRT 设置脚本自动更新hosts访问不可描述的站点
  18. Elasticsearch+logstash+kibana
  19. 人工智能革命,是创造就业还是摧毁就业?
  20. 计算机输入法无法启动,win7电脑开机没有输入法怎么办?

热门文章

  1. xpath中ends-with无法定位问题的解决办法
  2. Wordpress 网站设计入门 把Wordpress放在一个独立子目录下
  3. iOS- 利用UIImageView自己整了个不会说话的汤姆猫
  4. 5G核心网技术基础自学系列 | 与EPC互通
  5. 如何使用Redis Streams
  6. What is pessimistic locking in Hibernate
  7. 三级等保 MySQL8.0.24审计日志功能开启
  8. html5 indexedDB 数据库 详讲
  9. python 今日头条 控制手机_Python脚本下载今日头条视频(附加Android版本辅助下载器)...
  10. android10 systemUI亮度调节分析