初衷:

    db返回了一个实体类,想封装成一个Map留着按需获取属性,所以就有了下面的Utils

    

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.*; /**
* @program: ht
* @description: 实体类存入Map
* @author: Wangly
* @create: 2020-12-29 13:29
* @version: 1.0.0
*/
public class BeanMap {
/**
* 获取obj中的所有方法
*
* @param obj
* @return
*/
public List<Method> getAllMethods(Object obj) {
List<Method> methods = new ArrayList<Method>();
     // 获取obj字节码
Class<?> clazz = obj.getClass();
while (!clazz.getName().equals("java.lang.Object"))
      {
       // 获取方法
methods.addAll(Arrays.asList(clazz.getDeclaredMethods()));
clazz = clazz.getSuperclass();
}
return methods;
} /**
* 将一个类用属性名为Key,值为Value的方式存入map
*
* @param obj
* @return
*/
public Map<String, Object> convert2Map(Object obj) {
Map<String, Object> map = new HashMap<String, Object>();
List<Method> methods = getAllMethods(obj);
for (Method m : methods) {
String methodName = m.getName();
if (methodName.startsWith("get")) {
// 获取属性名
String propertyName = methodName.substring(3);
try {
map.put(propertyName, m.invoke(obj));
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
return map;
}
}

  Test

  测试实体类

import lombok.Data;

/**
* @program: ht
* @description: TestBeanMap
* @author: Wangly
* @create: 2020-12-29 13:37
* @version: 1.0.0
*/
@Data
public class Person {
private int id;
private String name;
private String nipples;
private String sw;
private String bra;
private String foot;
private String mouth; public Person() {} public Person(int id, String name, String nipples, String sw, String bra, String foot, String mouth) {
this.id = id;
this.name = name;
this.nipples = nipples;
this.sw = sw;
this.bra = bra;
this.foot = foot;
this.mouth = mouth;
}
}

  测试类

@Test
public void BeanMapTest() {
BeanMap beanMap = new BeanMap();
Person p = new Person();
p.setId(1);
p.setBra("pink");
p.setMouth("good");
p.setNipples("pink");
p.setSw("black");
p.setFoot("good"); Map<String, Object> stringObjectMap = beanMap.convert2Map(p);
stringObjectMap.forEach((k, v) -> {
System.out.println("k:" + k + ",v:" + v);
});
}

  输出

  发现多少沾点多此一举   避免重复造轮子

// 将 Map 转换为 实体类
Person person = JSON.parseObject(JSON.toJSONString(personMap), person.class);
System.out.println(user);
// 将 实体类 转换为 Map
Map map = JSON.parseObject(JSON.toJSONString(person), Map.class);
System.out.println(map);

实体类如何"不费力气"的转为Map的更多相关文章

  1. Android--将实体类转化成Json和Map的基类

    package com.newair.talk.base; import android.text.TextUtils; import com.google.gson.Gson; import jav ...

  2. javabean实体类对象转为Map类型对象的方法(转发)

    //将javabean实体类转为map类型,然后返回一个map类型的值 public static Map<String, Object> beanToMap(Object obj) { ...

  3. javabean(实体类)转Map类型

    javabean(实体类)转Map类型 从网上"風亦飞"的导出EXCEL的源代码提取出来的.认为非常好用.分享一下给大家,主要看beanToMap方法就OK了 /*以下是从poi导 ...

  4. oracle学习笔记(八)——结果集元数据ResultSetMetaData以及ResultSet转为对应的实体类框架

    介绍 可用于获取关于 ResultSet 对象中列的类型和属性信息的对象,在持久框层框架(如:mybatis, hibernate)中被广泛的应用. 常用方法 int getColumnCount() ...

  5. SpringBoot中Redis的set、map、list、value、实体类等基本操作介绍

    今天给大家介绍一下SpringBoot中Redis的set.map.list.value等基本操作的具体使用方法 上一节中给大家介绍了如何在SpringBoot中搭建Redis缓存数据库,这一节就针对 ...

  6. JAVA 中 Map 与实体类相互转换的简单方法

    1. 在 pom.xml 中引入依赖包 <dependency> <groupId>com.alibaba</groupId> <artifactId> ...

  7. java实体类和json串字段名称不一致或者与map中字段名称不一致使用注解转化

    package yuanCheng; import java.text.MessageFormat; import java.util.ArrayList; import java.util.List ...

  8. JAVA 实体类List<Entity >转 List<Map>

    public static <T extends IdEntity> List<Map<Object,Object>> EntityConvertMap(List& ...

  9. .Net Core NPOI读取Excel 并转为数据实体类

    创建应用程序 这里直接创建Console程序 引用NPOI的NuGet包 PM> Install-Package NPOI -Version 2.5.1 直接Nuget包管理器添加 导入Exce ...

  10. PhoneBean实体类的封装和map输出键值对的设置

    之前我们写好了bean类型.现在我们再看看这个需求中,map和reduce各自的流程. Map阶段: 字段切分以后保留如下字段:以第一行为例,就保留13726230503112  2481 24681 ...

随机推荐

  1. 字符串— trim()、trimStart() 和 trimEnd()

    在今天的教程中,我们将一起来学习JavaScript 字符串trim().trimStart() 和 trimEnd(). 01.trim() 学习如何使用 JavaScript  trim()方法从 ...

  2. ISCSI配置与挂载

    ISCSI介绍 iSCSI使用 TCP/IP 协议,来提供网络存储. 客户端挂载后,可以对其进行分区,进行格式化,就好像是安装在本机上的硬盘一样. 为了保证传输速率,通常采用光纤. 配置环境 Cent ...

  3. Notepad++ 搭建简单Java编译运行环境

    简介 有时候使用Eclips进行Java相关方法的测试和验证太繁琐,经过查询实践,使用了Notepad++和JDK搭建了一个简单的编译运行环境. 搭建过程 在电脑上安装Java环境(网上教程很多,此过 ...

  4. GAIA: 一个严苛的智能体基准

    简要概括 经过一些实验,我们对 Transformers 智能体构建智能体系统的性能印象深刻,因此我们想看看它有多好!我们使用一个 用库构建的代码智能体 在 GAIA 基准上进行测试,这可以说是最困难 ...

  5. c++临时对象导致的生命周期问题

    对象的生命周期是c++中非常重要的概念,它直接决定了你的程序是否正确以及是否存在安全问题. 今天要说的临时变量导致的生命周期问题是非常常见的,很多时候没有一定经验甚至没法识别出来.光是我自己写.rev ...

  6. 如何应对红帽不再维护 CentOS

    CentOS(Community Enterprise Operating System,社区企业操作系统)是一种开源的.免费的操作系统.由 Lance Davis 发起,通过社区驱动,目标是创建一个 ...

  7. css-渐变简约的登录设计

    代码如下 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...

  8. VBA | 统计数组某元素出现的次数,适用于一维、二维数组

    很简单的需求,但是中文网络上基本都是循环的方法,经过查找下面的方法很有效.为了方便用户的使用,进行了如下的整改. 1 Sub Statistics_Number_of_occurrences_test ...

  9. Geostudio简单实现边坡安全系数的计算

    Geostudio是加拿大团队开发的用于岩土工程稳定性分析的一款工程软件,里面的安全系数的计算基本都是基于极限平衡法原理进行求解的,SLOPE/W模块用于安全系数的求解.SEEP/W模块考虑渗水作用. ...

  10. 学习笔记--Java 运算符

    Java 运算符 算术运算符 关系运算符 逻辑运算符 位运算[略] 赋值运算符 字符串连接符 三元运算符 Java 运算符 按照功能划分: 功能 运算符 算术运算符 +.-.*./.++.--.% 关 ...