文档章节

java map 转 object

Sobey
 Sobey
发布于 2016/07/15 17:03
字数 201
阅读 39
收藏 2

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
博文 42
码字总数 15844
作品 0
黄浦
高级程序员
Java序列化与JSON序列化大比拼

一、背景 有项目需要传输Map结构的数据,有人倾向用Java序列化来做,有人倾向用JSON的序列化来做。所以我们还是比比吧。 Java观点:Object2Object,使用时简单快速。 JSON观点:JSON格式与语...

NoahX
2013/03/10
0
20
[转]理解ThreadLocal

ThreadLocal是什么 早在JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。使用这个工具类可以很简洁地编写出优美的多线程程序。 Th...

inferrrrrr
2009/11/03
0
0
一,setCycleDetectionStrategy 防止自包含 Java代码 收藏代码

一,setCycleDetectionStrategy 防止自包含 Java代码 /** * 这里测试如果含有自包含的时候需要CycleDetectionStrategy */ public static void testCycleObject() { CycleObject object = new......

itwriter
2014/03/19
0
0
转:理解ThreadLocal

ThreadLocal是什么 早在JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。使用这个工具类可以很简洁地编写出优美的多线程程序。 Th...

轮回今生
2012/10/26
0
0
深入ThreadLocal的内部机制

早在JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。使用这个工具类可以很简洁地编写出优美的多线程程序。ThreadLocal并不是一个T...

yqbboy
2012/10/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

day63-20180821-流利阅读笔记-待学习

性别歧视在日本:“我是女生,所以社会不让我学医” 毛西 2018-08-21 1.今日导读 大家在看病的时候,有留意过女医生的比例吗?在性别歧视现象十分严重的日本,男医生和女医生的比例达到了惊人...

aibinxiao
49分钟前
2
0
Ubuntu18.04 显卡GF-940MX安装NVIDIA-390.77

解决办法: 下面就给大家一个正确的姿势在Ubuntu上安装Nvidia驱动: (a)首先去N卡官网下载自己显卡对应的驱动:www.geforce.cn/drivers (b)下载后好放在英文路径的目录下,怎么简单怎么来...

AI_SKI
今天
4
0
深夜胡思乱想

魔兽世界 最近魔兽世界出了新版本, 周末两天升到了满级,比之前的版本体验好很多,做任务不用抢怪了,不用组队打怪也是共享拾取的。技能简化了很多,哪个亮按哪个。 运维 服务器 产品 之间的...

Firxiao
今天
1
0
MySQL 8 在 Windows 下安装及使用

MySQL 8 带来了全新的体验,比如支持 NoSQL、JSON 等,拥有比 MySQL 5.7 两倍以上的性能提升。本文讲解如何在 Windows 下安装 MySQL 8,以及基本的 MySQL 用法。 下载 下载地址 https://dev....

waylau
今天
2
0
微信第三方平台 access_token is invalid or not latest

微信第三方开发平台code换session_key说的特别容易,但是我一使用就带来无穷无尽的烦恼,搞了一整天也无济于事. 现在记录一下解决问题的过程,方便后来人参考. 我遇到的这个问题搜索了整个网络也...

自由的开源
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部