首页 > 编程语言 >【Java对象转换】002- Java 对象与 Map 互转

【Java对象转换】002- Java 对象与 Map 互转

时间:2023-02-22 21:07:30浏览次数:34  
标签:Map Java map System println 互转 java out


文章目录

  • ​​【Java对象转换】002- Java 对象与 Map 互转​​
  • ​​一、Java 对象与 Map 概述​​
  • ​​1、Java 对象​​
  • ​​2、Map​​
  • ​​二、Java 对象与 Map 互转​​
  • ​​1、使用 commons.beanutils 转换​​
  • ​​第一步:在 pom.xml 下引入依赖​​
  • ​​第二步:写个工具类​​
  • ​​第三步:代码演示​​
  • ​​第四步:运行结果​​
  • ​​2、使用Introspector转换​​
  • ​​第一步:写个工具类​​
  • ​​第二步:代码演示​​
  • ​​第三步:运行结果​​
  • ​​3、使用reflect转换​​
  • ​​第一步:写个工具类​​
  • ​​第二步:代码演示​​
  • ​​第三步:运行结果​​
  • ​​4、使用 net.sf.cglib.beans.BeanMap 转换​​
  • ​​第一步:在 pom.xml 下引入依赖​​
  • ​​第二步:写个工具类​​
  • ​​第三步:代码演示​​
  • ​​第四步:运行结果​​
  • ​​5、使用 json 转换​​
  • ​​第一步:在 pom.xml 下引入依赖​​
  • ​​第二步:写一个工具类​​
  • ​​第三步:代码演示​​
  • ​​第四步:运行结果​​
  • ​​三、 后记​​

【Java对象转换】002- Java 对象与 Map 互转

一、Java 对象与 Map 概述

1、Java 对象

  • Java对象是数据和处理可用数据的过程的组合;
  • 对象既有状态又有行为 。 在Java中,使用关键字“ new”创建对象;
  • 对象是从称为类的模板创建的;
  • 对象是类的实例。

2、Map

参考本人文章:Java中Map使用详解

二、Java 对象与 Map 互转

下面的工具类在具体使用的时候需要做具体调整,比如捕捉异常!

1、使用 commons.beanutils 转换

第一步:在 pom.xml 下引入依赖

<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.9.4</version>
</dependency>

第二步:写个工具类

package com.zibo.study.object_switch.beanutils;

import org.apache.commons.beanutils.BeanMap;
import org.apache.commons.beanutils.BeanUtils;

import java.util.Map;

public class ObjectAndMapUtil {
private ObjectAndMapUtil() {}

// map 转 java 对象
public static <T> T mapToObject(Map<String, Object> map, Class<T> clazz)
throws Exception {
if (map == null) {
return null;
}
T t = clazz.newInstance();
BeanUtils.populate(t, map);
return t;
}

// java 对象转 map
public static Map<?, ?> objectToMap(Object obj) {
if (obj == null) return null;
return new BeanMap(obj);
}
}

第三步:代码演示

package com.zibo.study.object_switch.beanutils;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

public class Main {
public static void main(String[] args) {
// 1、创建 Java 对象
Dog dog = new Dog("瓦豆", 2, 20.5, Arrays.asList("吃骨头", "玩球"));
// 2、使用工具类转 map
System.out.println("2、使用工具类转 map");
Map<?, ?> dogMap = ObjectAndMapUtil.objectToMap(dog);
System.out.println(dogMap.get("name"));
System.out.println(dogMap.get("age"));
System.out.println(dogMap.get("weight"));
System.out.println(dogMap.get("hobbies"));
// 3、使用工具类转 object
System.out.println("3、使用工具类转 object");
try {
Map<String, Object> map = new HashMap<>();
map.put("name", "瓦豆");
map.put("age", 2);
map.put("weight", 20.5);
map.put("hobbies", Arrays.asList("吃骨头", "玩球"));
Dog mapToDog = ObjectAndMapUtil.mapToObject(map, Dog.class);
// Dog mapToDog = ObjectAndMapUtil.mapToObject((Map<String, Object>) dogMap, Dog.class);
System.out.println(mapToDog);
} catch (Exception e) {
e.printStackTrace();
}
}
}

第四步:运行结果

2、使用工具类转 map
瓦豆
2
20.5
[吃骨头, 玩球]
3、使用工具类转 object
(中间忽略了一些日志)
Dog(name=瓦豆, age=2, weight=20.5, hobbies=[吃骨头, 玩球])

2、使用Introspector转换

第一步:写个工具类

package com.zibo.study.object_switch.beanutils;

import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;

public class ObjectAndMapUtil2 {
// map 转 java 对象
public static <T> T mapToObject(Map<String, Object> map, Class<T> clazz) throws IntrospectionException, InstantiationException, IllegalAccessException, InvocationTargetException {
if (map == null) return null;
T t = clazz.newInstance();
BeanInfo beanInfo = Introspector.getBeanInfo(t.getClass());
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
for (PropertyDescriptor property : propertyDescriptors) {
Method setter = property.getWriteMethod();
if (setter != null) setter.invoke(t, map.get(property.getName()));
}
return t;
}

// java 对象转 map
public static Map<String, Object> objectToMap(Object obj) throws IntrospectionException, InvocationTargetException, IllegalAccessException {
if (obj == null) return null;
Map<String, Object> map = new HashMap<>();
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;
}
}

第二步:代码演示

package com.zibo.study.object_switch.beanutils;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

public class Main {
public static void main(String[] args) throws Exception {
// 1、创建 Java 对象
Dog dog = new Dog("瓦豆", 2, 20.5, Arrays.asList("吃骨头", "玩球"));
// 2、使用工具类转 map
System.out.println("2、使用工具类转 map");
Map<?, ?> dogMap = ObjectAndMapUtil2.objectToMap(dog);
System.out.println(dogMap.get("name"));
System.out.println(dogMap.get("age"));
System.out.println(dogMap.get("weight"));
System.out.println(dogMap.get("hobbies"));
// 3、使用工具类转 object
System.out.println("3、使用工具类转 object");
try {
Map<String, Object> map = new HashMap<>();
map.put("name", "瓦豆");
map.put("age", 2);
map.put("weight", 20.5);
map.put("hobbies", Arrays.asList("吃骨头", "玩球"));
Dog mapToDog = ObjectAndMapUtil2.mapToObject(map, Dog.class);
// Dog mapToDog = ObjectAndMapUtil.mapToObject((Map<String, Object>) dogMap, Dog.class);
System.out.println(mapToDog);
} catch (Exception e) {
e.printStackTrace();
}
}
}

第三步:运行结果

2、使用工具类转 map
瓦豆
2
20.5
[吃骨头, 玩球]
3、使用工具类转 object
Dog(name=瓦豆, age=2, weight=20.5, hobbies=[吃骨头, 玩球])

3、使用reflect转换

第一步:写个工具类

package com.zibo.study.object_switch.beanutils;

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.HashMap;
import java.util.Map;

public class ObjectAndMapUtil3 {
// map 转 java 对象
public static <T> T mapToObject(Map<String, Object> map, Class<T> clazz) throws InstantiationException, IllegalAccessException {
if (map == null) return null;
T t = clazz.newInstance();
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
int mod = field.getModifiers();
if (Modifier.isFinal(mod) || Modifier.isStatic(mod)) continue;
field.setAccessible(true);
field.set(t, map.get(field.getName()));
}
return t;
}

// java 对象转 map
public static Map<String, Object> objectToMap(Object obj) throws IllegalAccessException {
if (obj == null) return null;
Map<String, Object> map = new HashMap<>();
Field[] declaredFields = obj.getClass().getDeclaredFields();
for (Field field : declaredFields) {
field.setAccessible(true);
map.put(field.getName(), field.get(obj));
}
return map;
}
}

第二步:代码演示

package com.zibo.study.object_switch.beanutils;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

public class Main {
public static void main(String[] args) throws Exception {
// 1、创建 Java 对象
Dog dog = new Dog("瓦豆", 2, 20.5, Arrays.asList("吃骨头", "玩球"));
// 2、使用工具类转 map
System.out.println("2、使用工具类转 map");
Map<?, ?> dogMap = ObjectAndMapUtil3.objectToMap(dog);
System.out.println(dogMap.get("name"));
System.out.println(dogMap.get("age"));
System.out.println(dogMap.get("weight"));
System.out.println(dogMap.get("hobbies"));
// 3、使用工具类转 object
System.out.println("3、使用工具类转 object");
try {
Map<String, Object> map = new HashMap<>();
map.put("name", "瓦豆");
map.put("age", 2);
map.put("weight", 20.5);
map.put("hobbies", Arrays.asList("吃骨头", "玩球"));
Dog mapToDog = ObjectAndMapUtil3.mapToObject(map, Dog.class);
// Dog mapToDog = ObjectAndMapUtil.mapToObject((Map<String, Object>) dogMap, Dog.class);
System.out.println(mapToDog);
} catch (Exception e) {
e.printStackTrace();
}
}
}

第三步:运行结果

2、使用工具类转 map
瓦豆
2
20.5
[吃骨头, 玩球]
3、使用工具类转 object
Dog(name=瓦豆, age=2, weight=20.5, hobbies=[吃骨头, 玩球])

4、使用 net.sf.cglib.beans.BeanMap 转换

第一步:在 pom.xml 下引入依赖

<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>3.3.0</version>
</dependency>

第二步:写个工具类

package com.zibo.study.object_switch.beanutils;

import com.google.common.collect.Maps;
import net.sf.cglib.beans.BeanMap;

import java.util.Map;

public class ObjectAndMapUtil4 {
// map 转 java 对象
public static <T> T mapToObject(Map<String, Object> map, Class<T> clazz) throws InstantiationException, IllegalAccessException {
T t = clazz.newInstance();
BeanMap beanMap = BeanMap.create(t);
beanMap.putAll(map);
return t;
}

// java 对象转 map
public static Map<String, Object> objectToMap(Object obj) {
if (obj == null) return null;
Map<String, Object> map = Maps.newHashMap();
BeanMap beanMap = BeanMap.create(obj);
for (Object key : beanMap.keySet()) {
map.put(key + "", beanMap.get(key));
}
return map;
}
}

第三步:代码演示

package com.zibo.study.object_switch.beanutils;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

public class Main {
public static void main(String[] args) {
// 1、创建 Java 对象
Dog dog = new Dog("瓦豆", 2, 20.5, Arrays.asList("吃骨头", "玩球"));
// 2、使用工具类转 map
System.out.println("2、使用工具类转 map");
Map<?, ?> dogMap = ObjectAndMapUtil4.objectToMap(dog);
System.out.println(dogMap.get("name"));
System.out.println(dogMap.get("age"));
System.out.println(dogMap.get("weight"));
System.out.println(dogMap.get("hobbies"));
// 3、使用工具类转 object
System.out.println("3、使用工具类转 object");
try {
Map<String, Object> map = new HashMap<>();
map.put("name", "瓦豆");
map.put("age", 2);
map.put("weight", 20.5);
map.put("hobbies", Arrays.asList("吃骨头", "玩球"));
Dog mapToDog = ObjectAndMapUtil4.mapToObject(map, Dog.class);
// Dog mapToDog = ObjectAndMapUtil.mapToObject((Map<String, Object>) dogMap, Dog.class);
System.out.println(mapToDog);
} catch (Exception e) {
e.printStackTrace();
}
}
}

第四步:运行结果

2、使用工具类转 map
瓦豆
2
20.5
[吃骨头, 玩球]
3、使用工具类转 object
Dog(name=瓦豆, age=2, weight=20.5, hobbies=[吃骨头, 玩球])

5、使用 json 转换

第一步:在 pom.xml 下引入依赖

<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.80</version>
</dependency>

第二步:写一个工具类

package com.zibo.study.object_switch.beanutils;

import com.alibaba.fastjson.JSONObject;

import java.util.Map;

public class ObjectAndMapUtil5 {
// map 转 java 对象
public static <T> T mapToObject(Map<String, Object> map, Class<T> clazz) {
String jsonStr = JSONObject.toJSONString(map);
return JSONObject.parseObject(jsonStr, clazz);
}

// java 对象转 map
public static Map<String, Object> objectToMap(Object obj) {
if(obj == null) return null;
String jsonStr = JSONObject.toJSONString(obj);
return JSONObject.parseObject(jsonStr);
}
}

第三步:代码演示

package com.zibo.study.object_switch.beanutils;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

public class Main {
public static void main(String[] args) {
// 1、创建 Java 对象
Dog dog = new Dog("瓦豆", 2, 20.5, Arrays.asList("吃骨头", "玩球"));
// 2、使用工具类转 map
System.out.println("2、使用工具类转 map");
Map<?, ?> dogMap = ObjectAndMapUtil5.objectToMap(dog);
System.out.println(dogMap.get("name"));
System.out.println(dogMap.get("age"));
System.out.println(dogMap.get("weight"));
System.out.println(dogMap.get("hobbies"));
// 3、使用工具类转 object
System.out.println("3、使用工具类转 object");
try {
Map<String, Object> map = new HashMap<>();
map.put("name", "瓦豆");
map.put("age", 2);
map.put("weight", 20.5);
map.put("hobbies", Arrays.asList("吃骨头", "玩球"));
Dog mapToDog = ObjectAndMapUtil5.mapToObject(map, Dog.class);
// Dog mapToDog = ObjectAndMapUtil.mapToObject((Map<String, Object>) dogMap, Dog.class);
System.out.println(mapToDog);
} catch (Exception e) {
e.printStackTrace();
}
}
}

第四步:运行结果

2、使用工具类转 map
瓦豆
2
20.5
["吃骨头","玩球"]
3、使用工具类转 object
Dog(name=瓦豆, age=2, weight=20.5, hobbies=[吃骨头, 玩球])

三、 后记

暂仅记录这么多,后续若有更好的方法会进行补充!



标签:Map,Java,map,System,println,互转,java,out
From: https://blog.51cto.com/u_13272819/6079419

相关文章

  • Java 截取字符串 split 方法与 substring 方法简单比较
    Java截取字符串split方法与substring方法简单比较文章目录​​Java截取字符串`split`方法与`substring`方法简单比较​​​​0、结论​​​​1、截取目标​​​​......
  • 【Java对象转换】001- Java 对象与 JSON 互转
    文章目录​​【Java对象转换】001-Java对象与JSON互转​​​​一、Java对象与JSON概述​​​​1、Java对象​​​​2、JSON​​​​二、JSON解析及与Java对象互转......
  • 【JavaScript】JS引擎中执行上下文如何顺序执行代码
    首先我们知道JavaScript引擎包括一个调用栈和堆,调用栈是代码实际执行的地方,使用执行上下文(执行环境)来完成;堆是非结构化的内存池,存储了应用程序所需要的所有对象。执行上......
  • java环境搭建
    百度下载jdk8(8u181)先登录甲骨文再下载,安装后要记得安装目录在我的电脑,属性,高级设置,环境变量里新建JAVA_HOME环境名,地址是安装目录找到Path在里面添加%JAVA_HOME%/bin和......
  • Java帝国的诞生
    Java帝国的诞生C&C++1972年C诞生贴近硬件,运行极快,效率极高。操作系统,编译器,数据库,网络系统等指针和内存管理1982年C++诞生面向对象兼容C图形领域、游戏等1995年J......
  • Java数据类型,变量命名的标准 (AJCG),分支和循环,文档注释的要求
    Java数据类型,变量,分支和循环Java中的八大基本数据类型数据类型占用字节数数据范围byte1B-128~127short2B-32768~32767int4B-2^31~2^31-1......
  • Java多线程技能-方法介绍
    java多线程技能技术点:线程的启动如何使线程暂停如何使线程停止线程的优先级线程安全相关的问题方法currentThread()currentThread()方法可返回代码段正在被哪......
  • Java-模块化
    模块的基本使用模块使用步骤创建模块(创建模块,创建包,创建类,定义方法)-创建两个模块myOne,myTwo在模块的src目录下创建module-info.java的描述性文件,该文件专门定义模块......
  • IDEA打开项目代码,识别不了资源文件(java文件、yml文件等),找不到或无法加载主类 com.xxxx
    如图所示,识别不了java文件和yml文件   点开EditConfigurations发现找不到启动类  运行会报错:  可以尝试如下解决办法办法:        然......
  • java多线程:详解JUC
    对应狂神说JUC视频1.JUC是什么java.util下的几个包的简称涉及到多线程的开发java.util.concurrentjava.util.atomicjava.util.concurrent.locks2.线程和进程进程:多个程序......