对于一个Map我们如何把它转成对应的对象呢,其实方法很多,我之前用的比较多的是通过JSON转换,如下:

public class Person {private String userName;private int age;public String getUserName() {return userName;}public int getAge() {return age;}public void setUserName(String userName) {this.userName = userName;}public void setAge(int age) {this.age = age;}
}
public static void main(String[] args) {Map<String,Object> source=new HashMap<>();source.put("userName","张三");source.put("age",1);//map转为对象Person person = JSONObject.parseObject(JSONObject.toJSONString(source), Person.class);System.out.println(JSONObject.toJSONString(person));}

但是这样总是感觉效率不高,所以就自己写了下面这个小工具类,效率翻倍,工具类如下:

public class MapToObj {/*** 把source转为target* @param source source* @param target target* @param <T> 返回值类型* @return 返回值* @throws Exception newInstance可能会抛出的异常*/public static <T> T mapToObj(Map source,Class<T> target) throws Exception {Field[] fields = target.getDeclaredFields();T o = target.newInstance();for(Field field:fields){Object val;if((val=source.get(field.getName()))!=null){field.setAccessible(true);field.set(o,val);}}return o;}}

使用方式:

public static void main(String[] args) throws Exception {Map<String,Object> source=new HashMap<>();source.put("userName","张三");source.put("age",1);//map转为对象Person person = MapToObj.mapToObj(source,Person.class);System.out.println(JSONObject.toJSONString(person));}

效果:

Java中如何优雅的把Map转为对象相关推荐

  1. java中list,set,map集合的区别,及面试要点

    Map集合:链接: Map集合的五种遍历方式及Treemap方法 Set集合:链接: Java中遍历Set集合的三种方法 TreeSet集合:链接: Java深入了解TreeSet,和迭代器遍历方法 ...

  2. Java中Array、List、Map相互转换

    引言: 在实际项目开发中或者一些算法面试题目中经常需要用到Java中这三种类型的相互转换,比如对于一个整型数组中寻找一个整数与所给的一个整数值相同,正常情况下第一反应会想到用for循环直接遍历这个数组 ...

  3. java map byte[],java中byte数组不能作为map的key使用

    今天在使用java写代码的时候,用byte数组作为map的key来使用,发现在遍历的时候get到之前传进去的值总是为空,很是困惑,后来查了下资料发现java中的字节数组不能直接作为map的key来使用 ...

  4. Java中如何遍历List , Set, Map

    Java中 List , Set 有共同的父类, 就是Collection.  所有实现Collection的接口的类都有一个iterator方法,用以返回一个Iterator接口的对象. Itera ...

  5. Java中的数据存储方法——Map:key-value

    package day05;import java.util.HashMap; import java.util.Map;/*** java.util.Map* Map看起来像是一个多行两列的表格.* ...

  6. Java中List,Set和Map详解及其区别和使用场景(转)

    Java中的集合包括三大类,它们是Set(集).List(列表)和Map(映射),它们都处于java.util包中,Set.List和Map都是接口,它们有各自的实现类.Set的实现类主要有HashS ...

  7. Java中 List、Set、Map 之间的区别

      小博此篇记录了开发过程中常用的几种集合详解,三者的区别对比均从IDEA相关层次图里面所得知,基于JDK8,如有错误欢迎批评指正. List(列表)   List的元素以线性方式存储,可以存放重复对 ...

  8. java中怎样创建多个对象,java中StringBuilder.appent方法创建几个对象

    在Java中StringBuilder是继承AbstractStringBuilder,在AbstractStringBuilder是byte[] value; 存放字符内容 public Abstr ...

  9. 四十三、深入Java中的数组流,数据流和对象流操作

    @Author:Runsen @Date:2020/6/8 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘课严重,专业排名 ...

最新文章

  1. Eclipse 每行 79 字符限制的提示线
  2. js 将图片置灰_JS 上传一张图片让其部分变灰色
  3. Java EE 8 MVC:使用路径参数
  4. WordPress 简洁好看hankin透明主题
  5. 【JSP开发】有关session的一些重要的知识点
  6. Oracle执行计划稳固
  7. 系统签名缺少libconscrypt_openjdk_jni.so解决
  8. 巩固——Vue中proxyTable代理接口的配置
  9. redis与mysql性能对比、redis缓存穿透、缓存雪崩
  10. python udp
  11. L298N电机驱动模块的使用
  12. 历年计算机考研复试_重点面试题
  13. 这一篇彻底说清楚了!乐高,编程,机器人到底要不要学?
  14. visio2013(64位)
  15. 【有效】vscode中markdown导出pdf报错解决: ERROR: Navigation Timeout Exceeded: 30000 ms exceeded
  16. 考公 | 粉笔网课笔记——数量 刘凯
  17. ECharts中使用tooltip时鼠标移入抖动问题
  18. Unity 百度智能对话API
  19. 关于 麒麟系统启动应用报错“undefined symbol: __cxa_throw_bad_array_new_length, version Qt_5“ 的解决方法
  20. jpg转bmp操作方法

热门文章

  1. CDR X8中的图框精确剪裁不见了,怎么找回?
  2. 微软独家付费功能,也被完美解锁了
  3. WebRTC Tutorial For Beginners
  4. 解析 GetRerootedSIL
  5. 增值税合理税筹,享受政策税收奖励返还,高达85%!
  6. 计算机1级考试试题ps,计算机一级《PS》考试及基础习题与答案
  7. openfire linux 启动,Openfire的启动过程与session管理
  8. 2013 duilib入门简明教程 -- 总结 (20)
  9. 上海内推 | 商汤科技招聘计算视觉算法实习生
  10. 计算机二级office几个答题,全国计算机二级Ms Office科目答题顺序指导