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