一、摘要
在实际开发过程中,经常碰到需要进行对象与map之间互转的问题,其实对于对象、Map 之间进行互转有很多种方式,下面我们一起来梳理一下:
- 利用 JSON 工具包,将对象转成字符串,之后再转成 Map,这种需要转换2次,相对来说效率比较底;
- 利用 Java 反射,获取 Bean 类的属性和值,再转换到 Map 对应的键值对中,相对来说这种方法效率高些,在实现上比较麻烦;
- 利用 Java 的内省(Introspector) 实现,获取 Bean 类的属性和值,Map与对象互转,效率比较高;
- 利用 apache 中的
BeanUtils
工具包进行操作,底层实现类似方法三; - 利用
net.sf.cglib.beans.BeanMap
类中的方法,这种方式效率也非常高;
二、常用方法
也不多说了,直接show code
,为了更接近实际场景,我们新建两个实体类User
、Role
,假设一个用户有多个角色,如下:
publicclass User {
private String userId;
private String userName;
private List<Role> roleList;
//... 省略 setter 和 getter
public User() {}
public User(String userId, String userName) {
this.userId = userId;
this.userName = userName;
}
}
publicclass Role {
private String userId;
private String roleName;
//... 省略 setter 和 getter
public Role(String userId, String roleName) {
this.userId = userId;
this.roleName = roleName;
}
}
2.1、通过 JSON 进行转换
在这里,我们利用阿里巴巴的fastjson
包进行转换,通过maven
引入 jar,如下:
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.49</version> </dependency> 方法如下:
publicclass BeanMapUtilByJson {
/**
* 对象转Map
* @param object
* @return
*/
public static Map beanToMap(Object object){
return JSONObject.parseObject(JSON.toJSONString(object),Map.class);
}
/**
* map转对象
* @