BeanUtils.copyProperties不支持复制集合的解决方案
点击关注公众号,利用碎片时间学习
工作中,经常使用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不支持复制集合的解决方案相关推荐
- 把javabean复制到另一个javabean 使用BeanUtils.copyProperties(a,b) 复制
该方法对于两种不同的jar包有两种不同的意义 ,a,b通常是两个结构相似的javabean,注意:a,b里的定义类型名称必须一致才能复制 引用的是org.springframework.beans 则 ...
- BeanUtils.copyProperties无法复制集合问题解决
工作中,经常使用Spring的工具类BeanUtils.copyProperties对bean属性进行复制,这里的复制属于浅复制.不能复制集合和数组. 两种方案: 一.循环里面使用BeanUtils. ...
- java对象复制到另一个对象中_spring: beanutils.copyproperties将一个对象的数据塞入到另一个对象中(合并对象)...
spring: beanutils.copyproperties将一个对象的数据塞入到另一个对象中(合并对象) 它的出现原因: BeanUtils提供对Java反射和自省API的包装.其主要目的是利用 ...
- 使用org.springframework.beans.BeanUtils..copyProperties(sourse, target)方法复制属性
使用org.springframework.beans.BeanUtils..copyProperties()方法进行copy两个类的属性. 注意: 1.源类Sourse中的属性需有get方法: 2. ...
- 利用BeanUtils在对象间复制属性
commons-beanutils是jakarta commons子项目中的一个软件包,其主要目的是利用反射机制对JavaBean的属性进行处理.我们知道,一个JavaBean通常包含了大量的属性,很 ...
- BeanUtils.copyProperties与PropertyUtils.copyProperties用法及区别
转自:http://www.cnblogs.com/fayf/articles/1272982.html 一.简介:BeanUtils提供对Java反射和自省API的包装.其主要目的是利用反射机制对J ...
- BeanUtils.copyProperties() 用法
转载自 https://blog.csdn.net/jdjdndhj/article/details/62056137 第一步: BeanUtils.copyProperties()与Property ...
- 关于BeanUtils.copyProperties的用法和优缺点
一.简介: BeanUtils提供对Java反射和自省API的包装.其主要目的是利用反射机制对JavaBean的属性进行处理.我们知道,一个JavaBean通常包含了大量的属性,很多情况下,对Jav ...
- BeanUtils.copyProperties使用
BeanUtils提供对Java反射和自省API的包装.其主要目的是利用反射机制对JavaBean的属性进行处理.我们知道,一个JavaBean通常包含了大量的属性,很多情况下,对JavaBean的处 ...
- 使用BeanUtils.copyProperties进行对象之间的属性赋值
1.使用org.springframework.beans.BeanUtils.copyProperties方法进行对象之间属性的赋值,避免通过get.set方法一个一个属性的赋值 /*** 对象属性 ...
最新文章
- 全中国一共有多少IP地址?
- 优化tableView性能(针对滑动时出现卡的现象)
- Innumerable Ancestors 尺取 dfs序 lca
- MFC应用程序框架入门
- DevExpress作为企业赞助商加入.NET基金会
- 微信小程序点击复制文本到剪切板,获取剪切板内容
- 谈谈物联网产业4G转型中的隐忧与应对
- DETR代码学习笔记(二)
- Android 系统签名(踩坑记)
- 2020年中国地质灾害和地震发生数量、受灾人数和经济损失现状,防护和治理至关重要「图」
- c程序设计第五版谭浩强课后答案 第四章习题答案
- 7-32 哥尼斯堡的“七桥问题”
- windows多显示器任务栏设置:拖动窗口后任务栏显示在对应的显示器上
- VisualAge使用技巧(二)
- 传统大地测量数字考点
- 图片缩略图,CMYK图片变红问题解决
- OpenWRT 设置脚本自动更新hosts访问不可描述的站点
- Elasticsearch+logstash+kibana
- 人工智能革命,是创造就业还是摧毁就业?
- 计算机输入法无法启动,win7电脑开机没有输入法怎么办?
热门文章
- xpath中ends-with无法定位问题的解决办法
- Wordpress 网站设计入门 把Wordpress放在一个独立子目录下
- iOS- 利用UIImageView自己整了个不会说话的汤姆猫
- 5G核心网技术基础自学系列 | 与EPC互通
- 如何使用Redis Streams
- What is pessimistic locking in Hibernate
- 三级等保 MySQL8.0.24审计日志功能开启
- html5 indexedDB 数据库 详讲
- python 今日头条 控制手机_Python脚本下载今日头条视频(附加Android版本辅助下载器)...
- android10 systemUI亮度调节分析