本文共 4959 字,大约阅读时间需要 16 分钟。
工作常常遇到将java的Bean对象转化为Map,或者将Map转为Bean对象。
常见的手段
效率低
比较麻烦,书写代码比较多
BeanMap
来完成 效率高,底层也是基于反射,不过做了些优化,比如缓存等手段 (推荐)
Apache的BeanUtils
来完成 bean转化map是Map<String, String>类型
循环转化1w次,对比下BeanMap和BeanUtils的耗时(毫秒)
方式 | bean转map | map转bean |
---|---|---|
BeanMap | 593 | 364 |
BeanUtils | 1254 | 2430 |
由上测试结果,我们可以看出BeanMap效率高,所以推荐使用BeanMap
更多内容可以关注:
BeanMap是org.springframework.cglib.beans.BeanMap
,在springcore中
package com.iworkh.test.restassured.utils;import org.springframework.cglib.beans.BeanMap;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;/** * bean和map互转 * * @author: iworkh-沐雨云楼 * @date: 2020-06-18 */public class BeanMapTool { public staticMap beanToMap(T bean) { BeanMap beanMap = BeanMap.create(bean); Map map = new HashMap<>(); beanMap.forEach((key, value) -> { map.put(String.valueOf(key), value); }); return map; } public static T mapToBean(Map map, Class clazz) throws IllegalAccessException, InstantiationException { T bean = clazz.newInstance(); BeanMap beanMap = BeanMap.create(bean); beanMap.putAll(map); return bean; } public static List
public class BeanMapToolTest { @Test public void testBeanToMap() { String[] hobbies = { "football", "sing"}; UserVo user = new UserVo(1, "zhangsan", System.currentTimeMillis(), false, Arrays.asList(hobbies)); Mapmap = BeanMapTool.beanToMap(user); System.out.println(map.get("name")); } @Test public void testMapToBean() { String[] hobbies = { "football", "sing"}; Map map = new HashMap<>(); map.put("id", 1); map.put("name", "zhangsan"); map.put("birthday", System.currentTimeMillis()); map.put("vip", false); map.put("hobbies", Arrays.asList(hobbies)); try { UserVo userVo = BeanMapTool.mapToBean(map, UserVo.class); System.out.println(userVo.getHobbies()); } catch (IllegalAccessException | InstantiationException e) { e.printStackTrace(); } }}
导入pom依赖
commons-beanutils commons-beanutils 1.9.3
package com.iworkh.test.restassured.utils;import org.apache.commons.beanutils.BeanUtils;import java.lang.reflect.InvocationTargetException;import java.util.Map;/** * Apache BeanUtils工具类 * * @author: iworkh-沐雨云楼 * @date: 2020-06-19 */public class BeanUtilsTool { public staticMap beanToMap(T bean) throws IllegalAccessException, NoSuchMethodException, InvocationTargetException { return BeanUtils.describe(bean); } public static T mapToBean(Map map, Class bean) throws IllegalAccessException, InstantiationException, InvocationTargetException { T t = bean.newInstance(); BeanUtils.populate(t, map); return t; }}
public class BeanUtilsToolTest { @Test public void testBeanToMap() { String[] hobbies = { "football", "sing"}; UserVo user = new UserVo(1, "zhangsan", System.currentTimeMillis(), false, Arrays.asList(hobbies)); try { Mapmap = BeanUtilsTool.beanToMap(user); System.out.println(map.get("name")); } catch (IllegalAccessException | NoSuchMethodException | InvocationTargetException e) { e.printStackTrace(); } } @Test public void testMapToBean() { String[] hobbies = { "football", "sing"}; Map map = new HashMap<>(); map.put("id", 1); map.put("name", "zhangsan"); map.put("birthday", System.currentTimeMillis()); map.put("vip", false); map.put("hobbies", Arrays.asList(hobbies)); try { UserVo userVo = BeanUtilsTool.mapToBean(map, UserVo.class); System.out.println(userVo.getHobbies()); } catch (IllegalAccessException | InstantiationException | InvocationTargetException e) { e.printStackTrace(); } }}
更多内容可以关注:
转载地址:http://ozhws.baihongyu.com/