apache-commons之BeanUtils、ConvertUtils、PropertyUtils、CollectionUtils的基本使用
BeanUtils工具包是由Apache公司所开发,主要是方便程序员对Bean类能够进行简便的操作。
BeanUtils一共分4个包:
org.apache.commons.beanutils
org.apache.commons.beanutils.converters
org.apache.commons.beanutils.locale
org.apache.commons.beanutils.locale.converters
其中需要我们特别关注的是这个org.apache.commons.beanutils包,其他包都是起辅助作用的。其中上面两个没有针对本地化的任何处理,执行效率高。下面两个对本地化有要求。
BeanUtils类
主要提供了对于JavaBean进行各种操作,比如对象,属性复制等等。
BeanUtils设置属性值的时候,如果属性是基本数据类型,那么BeanUtils会自动帮我们进行数据类型的转换,并且BeanUtils设置属性的时候也是依赖于底层的getter和setter方法。如果设置的属性值是其他的引用数据类型,此时必须要注册一个类型转换器才能实现自动的转换(参考下面的ConvertUtils)
常用方法:
cloneBean(Object bean) |
对象的克隆 |
copyProperties(Object dest, Object orig) |
对象的拷贝 |
copyProperty(Object bean, String name, Object value) |
拷贝指定的属性值到指定的bean |
setProperty(Object bean, String name, Object value) |
设置指定属性的值 |
populate(Object bean, Map<String,? extends Object> properties) |
将map数据拷贝到javabean中(map的key要与javabean的属性名称一致) |
注:copyProperty与setProperty,日常使用时推荐copyProperty。如果我们需要自定义实现populate()方法,那么我们可以override setProperty()方法.
示例:
// JavaBean
public class Animal {private String name;private int age;private String color;private String sex;public Animal() {}getXxx和setXxx省略……}
/*** BeanUtils*/
@Test
public void test1() throws Exception {Map<String, Object> map = new HashMap<String, Object>();map.put("name", "tuantuan");map.put("age", 3);map.put("color", "black");map.put("sex", "female");// 将map数据拷贝到javabean中Animal a1 = new Animal();BeanUtils.populate(a1, map);System.out.println(a1); // Animal [name=tuantuan, age=3, color=black, sex=female]// 对象的拷贝Animal a2 = new Animal();BeanUtils.copyProperties(a2, a1);System.out.println(a2);// Animal [name=tuantuan, age=3, color=black, sex=female]// 拷贝指定的属性Animal a3 = new Animal();BeanUtils.copyProperty(a3, "name", "yuanyuan");System.out.println(a3); // Animal [name=yuanyuan, age=0, color=null, sex=null]// 设置指定的属性BeanUtils.setProperty(a3, "sex", "male");System.out.println(a3); // Animal [name=yuanyuan, age=0, color=null, sex=male]// 克隆对象Object object = BeanUtils.cloneBean(a3);System.out.println(object); // Animal [name=yuanyuan, age=0, color=null, sex=male]
}
ConvertUtils
这个工具类的职能是在字符串和指定类型的实例之间进行转换。 实际上,BeanUtils是依赖ConvertUtils来完成类型转换,但是有时候我们可能需要自定义转换器来完成特殊需求的类型转换;
主要方法:
convert(Object value, Class<?> targetType) |
将给定的value转换成指定的Class类型 |
// 将整型转换成字符串
Object object = ConvertUtils.convert(123, String.class);
String typeName = object.getClass().getTypeName();
System.out.println(typeName);// 将日期转换成字符串
Object object2 = ConvertUtils.convert(new Date(), String.class);
String typeName2 = object2.getClass().getTypeName();
System.out.println(typeName2);// 将字符串转换成Double
Object object3 = ConvertUtils.convert("123", Double.class);
String typeName3 = object3.getClass().getTypeName();
System.out.println(typeName3);
自定义类型转换:
自定义转换器,实现Converter接口,重写convert方法
class MyConverter implements Converter {private static SimpleDateFormat format;public MyConverter(String pattern) {format = new SimpleDateFormat(pattern);}@Overridepublic Object convert(Class type, Object value) {if (value == null) {return null;}if (value instanceof String) {String tmp = (String) value;if (tmp.trim().length() == 0) {return null;} else {try {return format.parse(tmp);} catch (ParseException e) {e.printStackTrace();}}} else {throw new ConversionException("not String");}return value;}
}
使用:
MyConverter converter = new MyConverter("yyyy-MM-dd HH:mm:ss");
// 注册该转换器
ConvertUtils.register(converter, Date.class);
Object object3 = ConvertUtils.convert("2017-11-29 14:04:00", Date.class);
System.out.println(object3.getClass().getTypeName());
System.out.println(object3);
// BeanUtils设置属性时,自动进行类型转换
MyConverter converter = new MyConverter("yyyy-MM-dd HH:mm:ss");
// 注册该转换器
ConvertUtils.register(converter, Date.class);
Animal a5 = new Animal();
BeanUtils.copyProperty(a5, "birth", "2017-11-29 14:04:00");
System.out.println(a5);// Animal [name=null, age=0, color=null, sex=null, birth=Wed Nov 29 14:04:00 CST 2017]
PropertyUtils
BeanUtils与PropertyUtils这两个类几乎有一摸一样的功能,唯一的区别是:BeanUtils在对Bean赋值是会进行类型转化。
举例来说也就是在copyProperty时只要属性名相同,就算类型不同,BeanUtils也可以进行copy;而PropertyBean则可能会报错!!当然2个Bean之间的同名属性的类型必须是可以转化的,否则用BeanUtils一样会报错。若实现了org.apache.commons.beanutils.Converter接口则可以自定义类型之间的转化。由于不做类型转化,用PropertyUtils在速度上会有很大提高!
CollectionUtils
利用这个工具类,我们对集合进行修改、查询、过滤等操作
CollectionUtils属于commons-collections包
String[] arrA = new String[] { "1", "2", "3" };
String[] arrB = new String[] { "1", "a", "b" };
List<String> listA = Arrays.asList(arrA);
List<String> listB = Arrays.asList(arrB);// 判断集合是否为 空
System.out.println(CollectionUtils.isEmpty(listA));// false
System.out.println(CollectionUtils.isEmpty(listB));// false// 判断集合是否为 不为空
System.out.println(CollectionUtils.isNotEmpty(listA));// true
System.out.println(CollectionUtils.isNotEmpty(listB));// true// 两个集合的比较
System.out.println(CollectionUtils.isEqualCollection(listA, listB));// false// 集合的操作
// 取并集
System.out.println(CollectionUtils.union(listA, listB));// [1, a, 2, b, 3]
// 取交集
System.out.println(CollectionUtils.intersection(listA, listB));// [1]
// 取交集的补集
System.out.println(CollectionUtils.disjunction(listA, listB));// [a, 2, b, 3]
// 取集合相减
System.out.println(CollectionUtils.subtract(listA, listB));// [2, 3]
System.out.println(CollectionUtils.subtract(listB, listA));// [a, b]List<String> listC = new ArrayList<>();
listC.add("1");
listC.add("2");
listC.add("3");
String[] arrC = { "4", "5", "6" };
// 向集合中添加值
CollectionUtils.addAll(listC, arrC);
System.out.println(listC);// [1, 2, 3, 4, 5, 6]
备注:
整理的不完善,待后期完善
apache-commons之BeanUtils、ConvertUtils、PropertyUtils、CollectionUtils的基本使用相关推荐
- java实例拷贝,Apache Commons包 BeanUtils 对象拷贝实例demo
Apache Commons包 BeanUtils 对象拷贝实例demo 发布时间:2019-05-08作者:laosun阅读(1846) Apache Commons包 BeanUtils 对象拷贝 ...
- 一篇关于apache commons类库的详解
1.1. 开篇 在Java的世界,有很多(成千上万)开源的框架,有成功的,也有不那么成功的,有声名显赫的,也有默默无闻的.在我看来,成功而默默无闻的那些框架值得我们格外的尊敬和关注,Jakarta C ...
- apache commons collections CollectionUtils工具类简单使用
CollectionUtils提供很多对集合的操作方法,常用的方法如下 不仅可以判断Collection集合类,还可以判断JSONArray是否为空. import org.apache.common ...
- Java猿社区—Apache Commons Collections—CollectionUtils工具类详解
欢迎关注作者博客 简书传送门 文章目录 前言 代码示例 前言 论阅读源码的重要性,后期会对各大开源框架相关源码做详细阅读,并熟悉使用,本次主要对Apache Commons Collections中C ...
- Apache Commons 工具类介绍及简单使用(转)
转自:http://www.cnblogs.com/younggun/p/3247261.html Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下 ...
- 常用工具类 (一) : Apache Commons 常用工具类整理 (全)
文章目录 一.commons-lang3 引入依赖 StringUtils 字符串工具类 StringEscapeUtils 转义字符串工具类 NumberUtils 数字工具类 ArrayUtils ...
- Apache Commons 工具类介绍及简单使用
Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下面是我这几年做开发过程中自己用过的工具类做简单介绍. 组件 功能介绍 BeanUtils 提供了对于 ...
- Apache Commons工具集简介
文章出处 Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下面是我这几年做开发过程中自己用过的工具类做简单介绍. 组件 功能介绍 BeanUtils ...
- apache commons常用工具类
1.有些情况下,Arrays满足不到你对数组的操作?不要紧,ArrayUtils帮你 ArrayUtils public class TestMain { public static void ma ...
- 常用Apache Commons工具类备忘
常用Apache Commons工具类 ----------------------------------------------------------------- 例如:commons.lan ...
最新文章
- 很用心的写了 9 道 MySQL 面试题
- 【JUC并发编程04】线程间定制化通信(单标志法存在的问题)
- Python 数据分析与展示笔记2 -- 图像手绘效果
- Qt Assistant快速指南
- jvm回收垃圾_没有垃圾回收的JVM
- C语言转义字符的使用
- (108)FPGA面试题-介绍STA静态时序分析及其作用
- 《如何搭建小微企业风控模型》第六节节选 特征工程(下)
- mac上使用终端生成RSA公钥和密钥
- 网易发“暴力裁员”内部说明;京东负责不幸员工的孩子费用到22岁;Linux kernel 5.4发布 | 极客头条...
- 试用阿里开源的Arthas小记
- 2013-2018卷积神经网络中十个最重要的概念与创新
- js代码格式化工具(简单格式化,显示进度条)
- 这可能是最全的JAVA入门教程 ~
- RockWare RockWorks 17.0.0 1CD地表数据可视化软件
- nginx 502错误原因及解决办法
- java 7zip分卷压缩_7zip分卷压缩,rar分卷压缩文件
- 记事本改字体的代码java_记事本编程切换字体颜色 用java编写一个记事本程序
- 《C++ Primer Plus》(第6版)第3章编程练习
- Qt对话框的事件循环分析(子线程中不能创建UI窗体分析2)