当前位置: 首页 > news >正文

常用的map转bean互转方法

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

常用的map转bean互转方法

  • 一、hutool工具类
  • 二、fastjson工具类
  • 三、beanutils_BeanUtils工具类 不太好用
  • 四、cglib BeanMap工具类 不太好用
  • 五、reflect 反射来玩 不太好玩
  • 六、Introspector类 不太好用
  • 总结

一、hutool工具类

这个很常用,还支持将蛇形转成驼,如:apply_time 会赋值到applyTime上

LTDemo ltDemo = BeanUtil.mapToBean(map, LTDemo.class, true, CopyOptions.create());Map<String, Object> demoMap = BeanUtil.beanToMap(ltDemo);System.out.println("输出map -> bean: " + ltDemo.toString());System.out.println("输出bean -> map : " + demoMap);System.out.println(ltDemo.getApplyTime());System.out.println(ltDemo.getChildren());ltDemo.getChildren().forEach(children -> System.out.println(children.toString()));ltDemo.getChildren().forEach(children -> System.out.println(children.getAddress()));

输出原生map: {address=上海市, children=[{address=上海市, name=小张, apply_time=Fri Mar 03 17:21:01 CST 2023, age=2}], name=张三, apply_time=Fri Mar 03 17:21:01 CST 2023, age=20}
输出map -> bean: LTDemo(name=张三, age=20, address=上海市, applyTime=Fri Mar 03 17:21:01 CST 2023, children=[LTDemo(name=小张, age=2, address=上海市, applyTime=Fri Mar 03 17:21:01 CST 2023, children=[])])
输出bean -> map : {name=张三, age=20, address=上海市, applyTime=Fri Mar 03 17:21:01 CST 2023, children=[LTDemo(name=小张, age=2, address=上海市, applyTime=Fri Mar 03 17:21:01 CST 2023, children=[])]}
Fri Mar 03 17:21:01 CST 2023
[LTDemo(name=小张, age=2, address=上海市, applyTime=Fri Mar 03 17:21:01 CST 2023, children=[])]
LTDemo(name=小张, age=2, address=上海市, applyTime=Fri Mar 03 17:21:01 CST 2023, children=[])
上海市

二、fastjson工具类

这个也很常用,也支持将蛇型转成驼峰,
如:apply_time 会赋值到applyTime

LTDemo ltDemo = JSONObject.parseObject(JSONObject.toJSONString(map), LTDemo.class);Map demoMap = JSONObject.parseObject(JSONObject.toJSONString(ltDemo), Map.class);System.out.println("输出map -> bean: " + ltDemo.toString());System.out.println("输出bean -> map : " + demoMap);System.out.println(ltDemo.getApplyTime());System.out.println(ltDemo.getChildren());ltDemo.getChildren().forEach(children -> System.out.println(children.toString()));ltDemo.getChildren().forEach(children -> System.out.println(children.getAddress()));

输出原生map: {address=上海市, children=[{address=上海市, name=小张, apply_time=Fri Mar 03 17:21:59 CST 2023, age=2}], name=张三, apply_time=Fri Mar 03 17:21:59 CST 2023, age=20}
输出map -> bean: LTDemo(name=张三, age=20, address=上海市, applyTime=Fri Mar 03 17:21:59 CST 2023, children=[LTDemo(name=小张, age=2, address=上海市, applyTime=Fri Mar 03 17:21:59 CST 2023, children=[])])
输出bean -> map : {address=上海市, children=[{"address":"上海市","children":[],"name":"小张","applyTime":1677835319813,"age":2}], name=张三, applyTime=1677835319813, age=20}
Fri Mar 03 17:21:59 CST 2023
[LTDemo(name=小张, age=2, address=上海市, applyTime=Fri Mar 03 17:21:59 CST 2023, children=[])]
LTDemo(name=小张, age=2, address=上海市, applyTime=Fri Mar 03 17:21:59 CST 2023, children=[])
上海市

三、beanutils_BeanUtils工具类 不太好用

嵌套型map,转换会有问题,且不支持蛇型转成驼峰

    //-------------------    beanutils_BeanUtils  -----------------//map转java对象public static <T> T beanUtils_mapToObject(Map<String, Object> map, Class<T> clazz) throws Exception {if (map == null) {return null;}T bean = clazz.newInstance();BeanUtils.populate(bean, map);return bean;}
        LTDemo ltDemo = beanUtils_mapToObject(map, LTDemo.class);System.out.println("输出map -> bean: " + ltDemo.toString());System.out.println(ltDemo.getApplyTime());System.out.println(ltDemo.getChildren().get(0).getApplyTime());
输出map -> bean: LTDemo(name=张三, age=20, address=上海市, applyTime=Fri Mar 03 17:04:38 CST 2023, children=[{address=上海市, name=小张, applyTime=Fri Mar 03 17:04:38 CST 2023, age=2}])
Fri Mar 03 17:04:38 CST 2023
Exception in thread "main" java.lang.ClassCastException: java.util.HashMap cannot be cast to com.example.demo.map2bean.LTDemoat com.example.demo.map2bean.MapToBean.main(MapToBean.java:73)

四、cglib BeanMap工具类 不太好用

这个也很常用,也支持将蛇形转成驼,如:apply_time 会赋值到applyTime上

import net.sf.cglib.beans.BeanMap;// -------------------   cglib BeanMap  -------------------//map对象转javapublic static <T> T BeanMapMapToObject(Map<String, Object> map, Class<T> beanClass) throws Exception {T object = beanClass.newInstance();BeanMap beanMap = BeanMap.create(object);beanMap.putAll(map);return object;}//java对象转mappublic static Map<String, Object> BeanMapObjectToMap(Object obj) {Map<String, Object> map = Maps.newHashMap();if (obj != null) {BeanMap beanMap = BeanMap.create(obj);for (Object key : beanMap.keySet()) {map.put(key + "", beanMap.get(key));}}return map;}
        LTDemo ltDemo = beanMapMapToObject(map, LTDemo.class);Map demoMap = beanMapObjectToMap(ltDemo);System.out.println("输出map -> bean: " + ltDemo.toString());System.out.println("输出bean -> map : " + demoMap);System.out.println(ltDemo.getApplyTime());System.out.println(ltDemo.getChildren());ltDemo.getChildren().forEach(children -> System.out.println(children.toString()));
输出原生map: {address=上海市, children=[{address=上海市, name=小张, apply_time=Fri Mar 03 17:12:45 CST 2023, age=2}], name=张三, apply_time=Fri Mar 03 17:12:45 CST 2023, age=20}
输出map -> bean: LTDemo(name=张三, age=20, address=上海市, applyTime=null, children=[{address=上海市, name=小张, apply_time=Fri Mar 03 17:12:45 CST 2023, age=2}])
输出bean -> map : {address=上海市, children=[{address=上海市, name=小张, apply_time=Fri Mar 03 17:12:45 CST 2023, age=2}], name=张三, applyTime=null, age=20}
null
[{address=上海市, name=小张, apply_time=Fri Mar 03 17:12:45 CST 2023, age=2}]
Exception in thread "main" java.lang.ClassCastException: java.util.HashMap cannot be cast to com.example.demo.map2bean.LTDemoat java.util.ArrayList.forEach(ArrayList.java:1259)at com.example.demo.map2bean.MapToBean.main(MapToBean.java:75)

五、reflect 反射来玩 不太好玩

    //-------------------   reflect     -------------------//map转java对象public static Object reflectMapToObject(Map<String, Object> map, Class<?> beanClass) throws Exception {if (map == null) {return null;}Object object = beanClass.newInstance();Field[] fields = beanClass.getDeclaredFields();for (Field field : fields) {int mod = field.getModifiers();if (Modifier.isFinal(mod) || Modifier.isStatic(mod)) {continue;}field.setAccessible(true);field.set(object, map.get(field.getName()));}return object;}//java对象转mappublic static Map<String, Object> reflectObjectToMap(Object obj) throws Exception {if (obj == null) {return null;}Map<String, Object> map = new HashMap<String, Object>();Field[] declaredFields = obj.getClass().getDeclaredFields();for (Field field : declaredFields) {field.setAccessible(true);map.put(field.getName(), field.get(obj));}return map;}
        LTDemo ltDemo = reflectMapToObject(map,LTDemo.class);Map demoMap = reflectObjectToMap(ltDemo);System.out.println("输出map -> bean: " + ltDemo.toString());System.out.println("输出bean -> map : " + demoMap);System.out.println(ltDemo.getApplyTime());System.out.println(ltDemo.getChildren());ltDemo.getChildren().forEach(children -> System.out.println(children.toString()));
输出原生map: {address=上海市, children=[{address=上海市, name=小张, apply_time=Fri Mar 03 17:16:35 CST 2023, age=2}], name=张三, apply_time=Fri Mar 03 17:16:35 CST 2023, age=20}
输出map -> bean: LTDemo(name=张三, age=20, address=上海市, applyTime=null, children=[{address=上海市, name=小张, apply_time=Fri Mar 03 17:16:35 CST 2023, age=2}])
输出bean -> map : {address=上海市, children=[{address=上海市, name=小张, apply_time=Fri Mar 03 17:16:35 CST 2023, age=2}], name=张三, applyTime=null, age=20}
null
[{address=上海市, name=小张, apply_time=Fri Mar 03 17:16:35 CST 2023, age=2}]
Exception in thread "main" java.lang.ClassCastException: java.util.HashMap cannot be cast to com.example.demo.map2bean.LTDemoat java.util.ArrayList.forEach(ArrayList.java:1259)at com.example.demo.map2bean.MapToBean.main(MapToBean.java:84)

六、Introspector类 不太好用

这个用起来,只能转换第一层,而且不支持蛇型转驼峰


import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;//----------------- Introspector    ------------------//map转java对象public static <T> T introspector_mapToObject(Map<String, Object> map, Class<T> clazz) throws Exception {if (map == null) {return null;}T bean = clazz.newInstance();BeanInfo beanInfo = Introspector.getBeanInfo(bean.getClass());PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();for (PropertyDescriptor property : propertyDescriptors) {Method setter = property.getWriteMethod();if (setter != null) {setter.invoke(bean, map.get(property.getName()));}}return bean;}//java对象转mappublic static Map<String, Object> introspector_objectToMap(Object obj) throws Exception {if (obj == null) {return null;}Map<String, Object> map = new HashMap<String, Object>();BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();for (PropertyDescriptor property : propertyDescriptors) {String key = property.getName();if (key.compareToIgnoreCase("class") == 0) {continue;}Method getter = property.getReadMethod();Object value = getter != null ? getter.invoke(obj) : null;map.put(key, value);}return map;}
        LTDemo ltDemo = introspector_mapToObject(map, LTDemo.class);Map demoMap = introspector_objectToMap(ltDemo);System.out.println("输出map -> bean: " + ltDemo.toString());System.out.println("输出bean -> map : " + demoMap);System.out.println(ltDemo.getApplyTime());System.out.println(ltDemo.getChildren());System.out.println(ltDemo.getChildren().get(0).toString());
输出原生map: {address=上海市, children=[{address=上海市, name=小张, apply_time=Fri Mar 03 16:56:37 CST 2023, age=2}], name=张三, apply_time=Fri Mar 03 16:56:37 CST 2023, age=20}
输出map -> bean: LTDemo(name=张三, age=20, address=上海市, applyTime=null, children=[{address=上海市, name=小张, apply_time=Fri Mar 03 16:56:37 CST 2023, age=2}])
输出bean -> map : {address=上海市, children=[{address=上海市, name=小张, apply_time=Fri Mar 03 16:56:37 CST 2023, age=2}], name=张三, applyTime=null, age=20}
null
[{address=上海市, name=小张, apply_time=Fri Mar 03 16:56:37 CST 2023, age=2}]
Exception in thread "main" java.lang.ClassCastException: java.util.HashMap cannot be cast to com.example.demo.map2bean.LTDemoat com.example.demo.map2bean.MapToBean.main(MapToBean.java:65)

总结

不想说啥…看着用吧

相关文章:

常用的map转bean互转方法

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 常用的map转bean互转方法一、hutool工具类二、fastjson工具类三、beanutils_BeanUtils工具类 不太好用四、cglib BeanMap工具类 不太好用五、reflect 反射来玩 不太好玩六、I…...

2.4G收发一体芯片NRF24L01P跟国产软硬件兼容 SI24R1对比

超低功耗高性能 2.4GHz GFSK 无线收发器芯片Si24R1&#xff0c;软硬件兼容NRF24L01P. Si24R1 是一颗工作在 2.4GHz ISM 频段&#xff0c;专为低功耗无线场合设计&#xff0c;集成嵌入式ARQ 基带协议引擎的无线收发器芯片。工作频率范围为 2400MHz-2525MHz&#xff0c;共有 126个…...

设计模式之七大原则(一)——单一职责原则、开放-关闭原则

目录一、设计模式的目的二、设计模式的七大原则1.单一职责原则2.开放-关闭原则一、设计模式的目的 设计模式的目的是为了提高代码重用性、可读性、可扩展性、可靠性&#xff0c;使得程序呈现出高内聚、低耦合的特性。 代码重用性&#xff08;相同功能的代码&#xff0c;不用多…...

C++ set、unordered_set、multiset它们之间的区别与一些使用方法(不断更新)

set、unordered_set、multiset是什么&#xff1f;以及它们之间的区别 首先&#xff0c;它们三个都是C标准库提供的关联容器中的一种。只不过set、multiset容器是有序的&#xff0c;而unordered_set容器是无序的 std::set 是 C 标准库中的一个容器&#xff0c;其存储的元素按设…...

hadoop调优

hadoop调优 1 HDFS核心参数 1.1 NameNode内存生产配置 1.1.1 NameNode内存计算 每个文件块大概占用150byte&#xff0c;如果一台服务器128G&#xff0c;能存储的文件块如下 128 (G)* 1024(MB) * 1024(KB) * 1024(Byte) / 150 Byte 9.1 亿 1.1.2 Hadoop2.x 在Hadoop2.x中…...

EM@三角函数诱导公式

文章目录诱导公式单位圆坐标和三角函数记忆口诀符号看象限奇变偶不变例常用诱导公式&#x1f388;常用部分(5对)倒数关系六种三角函数间的转换关系小结ReflectionsShifts and periodicity诱导公式 诱导公式 - 维基百科&#xff0c;自由的百科全书 (wikipedia.org) 单位圆坐标…...

是不是只能学IT互联网技术才有发展前途?

当然不是&#xff0c;三百六十行&#xff0c;行行出状元。 但我们需要认清一个现实是&#xff0c;我们正处于一个信息爆炸的时代&#xff0c;掌握紧跟潮流的技术&#xff0c;才可以让我们更自信地面对每天的生活&#xff0c;才有多余的精力、财力来享受生活。“人生在世&#…...

Linux 进程:exit和_exit的辨析

目录1.接口与函数2.缓冲区3.exit 与 _exit(1)_exit(2)exit这里来认识exit函数和 _exit接口 &#xff0c;它们的作用是类似的&#xff0c;都是在调用后退出程序&#xff0c;可以在程序的任何地方调用。 1.接口与函数 exit函数和_exit接口&#xff0c;一个函数&#xff0c;一个…...

智能电子标签——商超版价签

2.1英寸TFT黑白电子价签 ★ 快速变价&#xff0c;高效运营 ★ 市场实用&#xff0c;布局物联网未来 ★ 更好客户体验 ★ 降低系统成本&#xff0c;具备竞争力 ★ 2.1英寸黑白红电子价签 ★ 电池低能耗&#xff0c;常规使用三年 ★ 穿透力强不慣障碍 ★ 2.4G载波&#x…...

计算机网络自检

1 计网体系结构 因特网结构&#xff1a; 计网三个组成成分&#xff1a; 工作方式-其中2个部分&#xff1a; 功能-两个子网&#xff1a; 5个XAN分别是&#xff1a; 传输技术&#xff0c;两者的主要区别&#xff1a; 4种基本网络拓扑结构&#xff1a; 3种交换技术&#xff1a; 协…...

DC真实数据都有哪些?Filecoin为DC数据存储的解决方案又是什么?

对于生活在数字时代的我们而言&#xff0c;数据或许就和平日呼吸的空气一样&#xff0c;已经不需要我们再去思考其概念。我们的日常生活中无时无刻都有数据的身影&#xff0c;日常的购物消费、出行、学习、记录&#xff0c;当我们每天生活有数字化加持的小区里&#xff0c;工作…...

解决vscode无法自动更新

一&#xff0e;前言 要在&#xff56;&#xff53;&#xff43;&#xff4f;&#xff44;&#xff45;里面安装插件&#xff0c;被提示版本不匹配&#xff0c;然后得更新&#xff0c;然后我发现我的&#xff07;帮助&#xff07;菜单栏下没有检查更新&#xff0c;然后我去&…...

315线上知识竞赛答题活动方案及模板分享

315线上知识竞赛答题活动方案及模板分享在315国际消费者权益日来临之际&#xff0c; 很多单位推出有奖知识竞答&#xff0c; 希望大家在了解专业知识的同时&#xff0c; 还可以拿到自己喜欢的奖品&#xff01;这是消费者委员会和监管局联合举办的“315消费知识在线有奖竞答”活…...

论文复现-2:代码部分

以CONLL03数据集为例 文章目录1 整体框架2 数据结构2.1 原始数据集2.2 处理之后的数据集3 代码部分3.0 模型参数3.1 数据预处理3.2 模型方法3.1.1 定义表示的学习权重项的学习双塔模型3.2.2 forward3.3 损失函数3.4 训练与推理Ablation study训练实例1 整体框架 任务是实体识别…...

Linux开放的端口太多了?教你一招找出所有开放的端口,然后直接干掉!

基于服务器安全性维护的目的&#xff0c;查看所有开放的端口是通常采取的第一步&#xff0c;从中检查出可疑或者不必要的端口并将其关掉。关于查看开放的端口&#xff0c;方法不止一种&#xff0c;比如lsof 命令&#xff0c;还可以使用 ss 命令。 查看开放的端口 今天我们就介…...

mysql集群简介

集群的好处 高可用性&#xff1a;故障检测及迁移&#xff0c;多节点备份。 可伸缩性&#xff1a;新增数据库节点便利&#xff0c;方便扩容。 负载均衡&#xff1a;切换某服务访问某节点&#xff0c;分摊单个节点的数据库压力。 集群要考虑的风险 网络分裂&#xff1a;群集还…...

装饰器模式

概述 当我们编写软件时&#xff0c;有时我们会遇到需要在不修改现有代码的情况下添加新功能的情况。这时&#xff0c;我们可以使用装饰器模式。 装饰器模式是一种结构性设计模式&#xff0c;它允许我们在不改变对象接口的情况下动态地向对象添加功能。装饰器模式通过创建一个…...

21 Nacos客户端本地缓存及故障转移

Nacos客户端本地缓存及故障转移 在Nacos本地缓存的时候有的时候必然会出现一些故障&#xff0c;这些故障就需要进行处理&#xff0c;涉及到的核心类为ServiceInfoHolder和FailoverReactor。 本地缓存有两方面&#xff0c;第一方面是从注册中心获得实例信息会缓存在内存当中&a…...

遍历读取文件夹下的所有文件

遍历读取文件夹下的所有文件 例如&#xff0c;读取文件夹下&#xff0c;子文件夹的所有的jpg文件&#xff1a; import glob path "./database/20230302/night/*/*.jpg"#设置自己的文件夹路径以及文件 image_files glob.glob(path, recursiveTrue)for image_file …...

nexus安装与入门

安装 nexus-3.31.1-01-unix.tar.gz 链接&#xff1a;https://pan.baidu.com/s/1YrJMwpGxmu8N2d7XMl6fSg 提取码&#xff1a;kfeh 上传到服务器&#xff0c;解压 tar -zvxf nexus-3.31.1-01-unix.tar.gz进入bin目录&#xff0c;启动 ./nexus start查看状态 ./nexus status默…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日&#xff0c;国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解&#xff0c;“超级…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅&#xff08;Pub/Sub&#xff09;模式与专业的 MQ&#xff08;Message Queue&#xff09;如 Kafka、RabbitMQ 进行比较&#xff0c;核心的权衡点在于&#xff1a;简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

计算机基础知识解析:从应用到架构的全面拆解

目录 前言 1、 计算机的应用领域&#xff1a;无处不在的数字助手 2、 计算机的进化史&#xff1a;从算盘到量子计算 3、计算机的分类&#xff1a;不止 “台式机和笔记本” 4、计算机的组件&#xff1a;硬件与软件的协同 4.1 硬件&#xff1a;五大核心部件 4.2 软件&#…...

【 java 虚拟机知识 第一篇 】

目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...

mac:大模型系列测试

0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何&#xff0c;是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试&#xff0c;是可以跑通文章里面的代码。训练速度也是很快的。 注意…...

【UE5 C++】通过文件对话框获取选择文件的路径

目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 &#xff0c;这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器&#xff0c;右键点击 .uproject 文件&#xff0c;选择 "Generate Visual Studio project files"&#xff0c;重…...