文档章节

java map 转 object

Sobey
 Sobey
发布于 2016/07/15 17:03
字数 201
阅读 38
收藏 2
点赞 0
评论 0

private <T> List<T> maplist2objlist(List<Map<String,Object>> list,Class<T> clazz){
  List<T> resultList=new LinkedList<T>();
  try {
   if(list!=null&&list.size()>0){
    BeanInfo beanInfo=Introspector.getBeanInfo(clazz);
    PropertyDescriptor[] propertyDescriptors=beanInfo.getPropertyDescriptors();
    for(Map<String,Object> map:list){
     if(map==null)continue;
     T resultObj=clazz.newInstance();
     for(Entry<String,Object> entry:map.entrySet()){
      for(PropertyDescriptor field:propertyDescriptors){
       if(entry.getKey().toLowerCase().equals(field.getName().toLowerCase())){
        String fieldName=field.getName();
        Method setMethod=field.getWriteMethod();
        if(setMethod!=null){
         if(entry.getValue()!=null&&entry.getValue() instanceof Map){
          @SuppressWarnings("unchecked")
          Map<String,Object> inMap=(Map<String, Object>) entry.getValue();
          BeanUtils.setProperty(resultObj, fieldName, map2obj(inMap,field.getPropertyType()));
         }else{
          BeanUtils.setProperty(resultObj, fieldName, entry.getValue());
         }
        }
        break;
       }
      }
     }
     resultList.add(resultObj);
    }
   }
  } catch (Exception e) {
   // TODO: handle exception
   e.printStackTrace();
  }
  return resultList;
 }


 public <T> Object map2obj(Map<String,Object> map,Class<T> clazz){
  T resultObj=null;
  try {
   if(map!=null){
    resultObj=clazz.newInstance();
    BeanInfo beanInfo=Introspector.getBeanInfo(clazz);
    PropertyDescriptor[] propertyDescriptors=beanInfo.getPropertyDescriptors();
    for(Entry<String,Object> entry:map.entrySet()){
     for(PropertyDescriptor field:propertyDescriptors){
      if(entry.getKey().toLowerCase().equals(field.getName().toLowerCase())){
       String fieldName=field.getName();
       Method setMethod=field.getWriteMethod();
       if(setMethod!=null){
        if(entry.getValue()!=null&&entry.getValue() instanceof Map){
         @SuppressWarnings("unchecked")
         Map<String,Object> inMap=((Map<String, Object>) entry.getValue());
         BeanUtils.setProperty(resultObj, fieldName, map2obj(inMap,field.getPropertyType()));
        }else{
         BeanUtils.setProperty(resultObj, fieldName, entry.getValue());
        }
       }
      }
     }
    }
   }
  } catch (Exception e) {
   // TODO: handle exception
   e.printStackTrace();
  }
  return resultObj;
 }

© 著作权归作者所有

共有 人打赏支持
Sobey
粉丝 4
博文 40
码字总数 15844
作品 0
黄浦
高级程序员
java面试必备之ThreadLocal

按照传统的经验,如果某个对象是非线程安全的,在多线程环境下对象的访问需要采用synchronized进行同步。但是模板类并未采用线程同步机制,因为线程同步会降低系统的并发性能,此外代码同步解...

编程老司机 ⋅ 05/16 ⋅ 0

第二章 第一节 spring-beans之BeanNameGenerator深入详解

前言 BeanNameGenerator是beans体系非常重要的一个组件,主要功能是从一定的条件中计算出bean的name.如果出现问题,是可以规避的。同样可以重写解决。 从上面的数据中可以看出,bean的管理基...

鸟菜啊 ⋅ 04/26 ⋅ 0

14、Java并发性和多线程-Java ThreadLocal

以下内容转自http://ifeve.com/java-theadlocal/: Java中的ThreadLocal类可以让你创建的变量只被同一个线程进行读和写操作。因此,尽管有两个线程同时执行一段相同的代码,而且这段代码又有...

easonjim ⋅ 2017/06/16 ⋅ 0

深入理解 ThreadLocal (这些细节不应忽略)

前言 对于 ThreadLocal 的使用,并不难。但要深入理解 ThreadLocal 的实现方式,需要细细揣摩。写本文前,我在网上看了很多关于 ThreadLocal 的分析,但却感到遗憾,因为很多文章存在着一定误...

徐志毅 ⋅ 04/11 ⋅ 0

从Java到Kotlin,然后又回到Java!

最近Java与kotlin语言之争又有点小热,大概是因为某位当初吹捧Java的大神来华兜售其kotlin新书有关,但是与此同时相反观点也是不断涌现,Allegro团队就在他们的博客发表这篇文章,从Java到K...

欧阳海阳 ⋅ 05/28 ⋅ 0

java中有了基本类型为什么还要有包装类型?

java中有了基本类型为什么还要有包装类型? 1、Java中基本数据类型与包装类型有: 2、为什么存在这两种类型呢? 我们都知道在Java语言中,new一个对象存储在堆里,我们通过栈中的引用来使用这...

Qiu_CJ ⋅ 04/27 ⋅ 0

ThreadLocal可能引起的内存泄露

  threadlocal里面使用了一个存在弱引用的map,当释放掉threadlocal的强引用以后,map里面的value却没有被回收.而这块value永远不会被访问到了. 所以存在着内存泄露. 最好的做法是将调用thr...

天天顺利 ⋅ 06/15 ⋅ 0

JavaWeb13-HTML篇笔记(一)

1.1 上次课内容回顾: JSP : 1.2 使用MVC设计模式完成转账的案例:1.2.1 需求: 设计一个页面,输入三个值,一个是付款人,一个是收款人,一个是转账的金额.不能出现付款人的钱被扣除而收款人没有收...

我是小谷粒 ⋅ 05/29 ⋅ 0

ThreadLocal趣谈 —— 杨过和他的四个冤家

一个一个上 一日醒来,杨过发现小龙女离家出走,于是外出寻找,不料碰上了金轮法王、李莫愁、裘千尺、公孙止四个冤家。 “哼,四个打我一个,算什么英雄好汉,有本事的,一个一个上!” 按照...

SexyCode ⋅ 06/12 ⋅ 0

使用Hibernate+MySql+native SQL的BUG,以及解决办法

本来是mssql+hibernate+native SQL 应用的很和谐 但是到了把mssql换成mysql,就出了错(同样的数据结构和数据)。 查询方法是: 错误信息: 看到最后Caused by: java.sql.SQLException: 所以我...

thinkyoung ⋅ 2015/01/15 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

那些证书相关的玩意儿(SSL,X.509,PEM,DER,CRT,CER,KEY,CSR,P12等)

之前没接触过证书加密的话,对证书相关的这些概念真是感觉挺棘手的,因为一下子来了一大堆新名词,看起来像是另一个领域的东西,而不是我们所熟悉的编程领域的那些东西,起码我个人感觉如此,且很长...

颖辉小居 ⋅ 16分钟前 ⋅ 0

利用有限制通配符提升API灵活性(28)

1、参数化类型是不可变的 List<String> 不是List<Object>的子类,但是二者是有联系的 利用有限制的通配符类型处理类似情况 List<? extends Object>(生产者) Collection<? super E>(消费者......

职业搬砖20年 ⋅ 22分钟前 ⋅ 0

ssm框架 +bootstrap分页

这里有两种方式 方式一:自己写分页 方式二:使用插件PageHelper 1.自己写分页 1.1 效果 1.2 实现过程 1.2.1 创建分页公共类 //---------------------------1.属性-------------------------...

Lucky_Me ⋅ 29分钟前 ⋅ 0

Istio

helm template install/kubernetes/helm/istio --name istio --namespace istio-system > $HOME/istio.yaml after $ kubectl create namespace istio-system$ kubectl create -f $HOME/ist......

openthings ⋅ 29分钟前 ⋅ 0

内核线程、轻量级进程、用户线程

线程与进程概念 在现代操作系统中,进程支持多线程。 进程是资源管理的最小单元; 线程是程序执行的最小单元。 即线程作为调度和分配的基本单位,进程作为资源分配的基本单位 一个进程的组成...

117 ⋅ 34分钟前 ⋅ 0

elasticsearch2.4.6升级为elasticsearch-5.5.0的经历

将elasticsearch-5.5.0 中的配置 path.data 指向原来的数据路径 即 path.data: /usr/local/src/elasticsearch-2.4.6/data 注意: elasticsearch-5.5.0 需要将jdk版本升级到1.8...

晨猫 ⋅ 35分钟前 ⋅ 1

lvm讲解 磁盘故障小案例

1

oschina130111 ⋅ 39分钟前 ⋅ 0

那些提升开发人员工作效率的在线工具

本文转载自公众号 Hollis 作为一个Java开发人员,经常要和各种各样的工具打交道,除了我们常用的IDE工具以外,其实还有很多工具是我们在日常开发及学习过程中要经常使用到的。 Hollis偏爱使用...

时刻在奔跑 ⋅ 51分钟前 ⋅ 0

restful风格 实现DELETE PUT请求 的web.xml的配置

import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframe......

泉天下 ⋅ 57分钟前 ⋅ 0

Shell数组

Shell数组 Shell在编程方面比Windows批处理强大很多,无论是在循环、运算。 bash支持一维数组(不支持多维数组),并且没有限定数组的大小。类似与C语言,数组元素的下标由0开始编号。获取数...

蜗牛奔跑 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部