浅谈对象与Map相互转化

javabean与map的转换有很多种方式,比如:

1、通过ObjectMapper先将bean转换为json,再将json转换为map,但是这种方法比较绕,且效率很低,经测试,循环转换10000个bean,就需要12秒!!!不推荐使用

2、通过java反射,获取bean类的属性和值,再转换到map对应的键值对中,这种方法次之,但稍微有点麻烦

3、通过net.sf.cglib.beans.BeanMap类中的方法,这种方式效率极高,它跟第二种方式的区别就是因为使用了缓存,初次创建bean时需要初始化,之后就使用缓存,所以速度极快,经测试,循环bean和map的转换10000次,仅需要300毫秒左右。

所以,推荐第3种方式。  以下是相关代码:

  /**
 * 将对象装换为map
 * @param bean
 * @return
 */
public static <T> Map<String, Object> beanToMap(T bean) {
  Map<String, Object> map = Maps.newHashMap();
  if (bean != null) {
    BeanMap beanMap = BeanMap.create(bean);
    for (Object key : beanMap.keySet()) {
      map.put(key+"", beanMap.get(key));
    }
  }
  return map;
}
/**
 * 将map装换为javabean对象
 * @param map
 * @param bean
 * @return
 */
public static <T> T mapToBean(Map<String, Object> map,T bean) {
  BeanMap beanMap = BeanMap.create(bean);
  beanMap.putAll(map);
  return bean;
}
/**
 * 将List<T>转换为List<Map<String, Object>>
 * @param objList
 * @return
 * @throws JsonGenerationException
 * @throws JsonMappingException
 * @throws IOException
 */
public static <T> List<Map<String, Object>> objectsToMaps(List<T> objList) {
  List<Map<String, Object>> list = Lists.newArrayList();
  if (objList != null && objList.size() > 0) {
    Map<String, Object> map = null;
    T bean = null;
    for (int i = 0,size = objList.size(); i < size; i++) {
      bean = objList.get(i);
      map = beanToMap(bean);
      list.add(map);
    }
  }
  return list;
}
/**
 * 将List<Map<String,Object>>转换为List<T>
 * @param maps
 * @param clazz
 * @return
 * @throws InstantiationException
 * @throws IllegalAccessException
 */
public static <T> List<T> mapsToObjects(List<Map<String, Object>> maps,Class<T> clazz) throws InstantiationException, IllegalAccessException {
  List<T> list = Lists.newArrayList();
  if (maps != null && maps.size() > 0) {
    Map<String, Object> map = null;
    T bean = null;
    for (int i = 0,size = maps.size(); i < size; i++) {
      map = maps.get(i);
      bean = clazz.newInstance();
      mapToBean(map, bean);
      list.add(bean);
    }
  }
  return list;
} 

关于利用BeanMap进行对象与Map的相互转换的介绍和代码就到这里,希望能对大家有所帮助。如果您有什么问题可以给我留言,小编会及时回复大家的。感谢大家对本站的支持。

(0)

相关推荐

  • Java遍历Map对象的四种方式

    关于java中遍历map具体哪四种方式,请看下文详解吧. 方式一 这是最常见的并且在大多数情况下也是最可取的遍历方式.在键值都需要时使用. Map<Integer, Integer> map = new HashMap<Integer, Integer>(); for (Map.Entry<Integer, Integer> entry : map.entrySet()) { System.out.println("Key = " + entry.g

  • JS自定义对象实现Java中Map对象功能的方法

    本文实例讲述了JS自定义对象实现Java中Map对象功能的方法.分享给大家供大家参考.具体分析如下: Java中有集合,Map等对象存储工具类,这些对象使用简易,但是在JavaScript中,你只能使用Array对象. 这里我创建一个自定义对象,这个对象内包含一个数组来存储数据,数据对象是一个Key,可以实际存储的内容!   这里Key,你要使用String类型,和Java一样,你可以进行一些增加,删除,修改,获得的操作. 使用很简单,我先把工具类给大家看下: 复制代码 代码如下: /**  *

  • 使用GSON库将Java中的map键值对应结构对象转换为JSON

    Map的存储结构式Key/Value形式,Key 和 Value可以是普通类型,也可以是自己写的JavaBean(本文),还可以是带有泛型的List. (GSON的GitHub项目页:https://github.com/google/gson) JavaBean 本例中您要重点看如何将Json转回为普通JavaBean对象时TypeToken的定义. 实体类: public class Point { private int x; private int y; public Point(int

  • AngularJS操作键值对象类似java的hashmap(填坑小结)

    前言: 我们知道java的hashmap中使用最多的是put(...),get(...)以及remove()方法,那么在angularJS中如何创造(使用)这样一个对象呢 思路分析: 我们知道在java中可以采用链式访问和"[]"访问hashmap的某一个值 具体实现: 链式访问: .factory('ParamsServices', function () { var params = {}; return { get: function (key) { return params.

  • 浅谈对象与Map相互转化

    javabean与map的转换有很多种方式,比如: 1.通过ObjectMapper先将bean转换为json,再将json转换为map,但是这种方法比较绕,且效率很低,经测试,循环转换10000个bean,就需要12秒!!!不推荐使用 2.通过java反射,获取bean类的属性和值,再转换到map对应的键值对中,这种方法次之,但稍微有点麻烦 3.通过net.sf.cglib.beans.BeanMap类中的方法,这种方式效率极高,它跟第二种方式的区别就是因为使用了缓存,初次创建bean时需要初

  • 浅谈Java之Map 按值排序 (Map sort by value)

    Map是键值对的集合,又叫作字典或关联数组等,是最常见的数据结构之一.在java如何让一个map按value排序呢? 看似简单,但却不容易! 比如,Map中key是String类型,表示一个单词,而value是int型,表示该单词出现的次数,现在我们想要按照单词出现的次数来排序: Map map = new TreeMap(); map.put("me", 1000); map.put("and", 4000); map.put("you", 3

  • 浅谈MyBatis循环Map(高级用法)

    今天遇到一个比较特殊的业务,需要对传入的Map数据在映射文件中进行遍历,在之前的学习中,我们也知道MyBatis有默认对集合的操作list和array,但是没有默认的map,所有不能直接写collection="map",如果这么处理,它会当成是根据map.get("map")获取传递value只,==大部分情况下是一个map中是不会有"map"这个key的,于是就是报错==.如果你想用map标识来获取参数map,就需要保证传入的Map参数有@P

  • 浅谈jquery的map()和each()方法

    1. map()方法 //找到所有的标题元素,映射它们的ID,并转化为数组后排序 $(':header').map(function(){return this.id}).toArray().sort(); 2. each()方法 $('div').each(function(){ if($(this).is(':hidden')) return;//跳过隐藏的元素 //对可见的元素操作 }); 以上这篇浅谈jquery的map()和each()方法就是小编分享给大家的全部内容了,希望能给大家一

  • 浅谈对象数组或list排序及Collections排序原理

    常需要对list进行排序,小到List<String>,大到对自定义的类进行排序.不需要自行归并或堆排序.简单实现一个接口即可. 本文先会介绍利用Collections对List<String>进行排序,继而讲到Collections.sort的原理, 再讲到如何对自定义类进行排序, 最后会介绍利用Collections sort对自定义对象进行排序的另外一种方法,并将两种排序进行了简单的性能比较. 1.对List<String>排序及Collections.sort的

  • 浅谈java8中map的新方法--replace

    Map在Java8中新增了两个replace的方法 1.replace(k,v) 在指定的键已经存在并且有与之相关的映射值时才会将指定的键映射到指定的值(新值) 在指定的键不存在时,方法会return回来一个null javadoc的注释解释了该默认值方法的实现的等价Java代码: if (map.containsKey(key)) { return map.put(key, value); } else { return null; } 下面展示的是新方法和JDK8之前的方法比较: /* *

  • 浅谈Pandas中map, applymap and apply的区别

    1.apply() 当想让方程作用在一维的向量上时,可以使用apply来完成,如下所示 In [116]: frame = DataFrame(np.random.randn(4, 3), columns=list('bde'), index=['Utah', 'Ohio', 'Texas', 'Oregon']) In [117]: frame Out[117]: b d e Utah -0.029638 1.081563 1.280300 Ohio 0.647747 0.831136 -1.

  • 浅谈Java中Map和Set之间的关系(及Map.Entry)

    1.通过查找API文档: 2.Map.Entry是一个接口,所以不能直接实例化. 3.Map.entrySet( )返回的是一个collection集合,并且,这个collection中的元素是Map.Entry类型,如下图所示: 4. Map是Java中的接口,Map.Entry是Map的一个内部接口.java.util.Map.Entry接口主要就是在遍历map的时候用到. Map提供了一些常用方法,如keySet().entrySet()等方法,keySet()方法返回值是Map中key值

  • 浅谈java中Map的用法

    public interface Map<K,V> 将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值. import javautilHashMap; import javautilMap; public class Test { public static void main(String[] args) { Map map = new HashMap();//声明一个Map mapput("s", "哈哈");//向map中放

  • 浅谈java对象之间相互转化的多种方式

    第一种:使用org.apache.commons.beanutils.PropertyUtils.copyProperties()拷贝一个bean中的属性到另一个bean中,第一个参数是目标bean,第二个参数是源bean. 特点: 1.它的性能问题相当差 2.PropertyUtils有自动类型转换功能,而java.util.Date恰恰是其不支持的类型 3.PropertyUtils支持为null的场景: public static void copyProperties(Object de

随机推荐