java Object类型转Map_qq_16553883的博客-程序员宝宝_java object转map

技术标签: java  类型转换  java开发  map  

仅供参考

@Log4j
public class ObjectToMap {
    /*简单Object转成map*/
    public static Map<String,String> toMap(Object o){
        Map<String,String> map=new HashMap<String, String>();
        Field[] fields=o.getClass().getDeclaredFields();
        try {
            for (int i=0;i<fields.length;i++) {
                String name=fields[i].getName();
                Field field=o.getClass().getDeclaredField(name);
                field.setAccessible(true);
                if (null!=field){
                    map.put(name,field.get(o).toString());
                }
            }
        }catch(Exception e){
            log.error(e.getMessage(),e);
        }
        return map;
    }
    /*复杂Object转成map*/
    public static Map<String, Object> toObjectMap(Object object) {
        Map<String, Object> map = new HashMap<String, Object>();
        toMap(object.getClass(), object, map);
        return map;
    }
    private static void toMap(Class<?> clazz, Object object, Map<String, Object> map) {
        Method[] methods = clazz.getDeclaredMethods();
        if (methods != null && methods.length > 0) {
            for (Method method : methods) {
                String mname = method.getName();
                if (mname.startsWith("get") && method.getParameterTypes().length == 0) {
                    try {
                        String fieldName = mname.substring(3, 4).toLowerCase() + mname.substring(4);
                        if ("serialVersionUID".equals(fieldName)) {
                            continue;
                        } else if ("class".equals(fieldName)) {
                            continue;
                        }
                        Object fieldValue = method.invoke(object, null);
                        if (fieldValue != null) {
                            map.put(fieldName, fieldValue);
                        }
                    } catch (IllegalAccessException e) {
                        log.info(e.getMessage(),e);

                    } catch (InvocationTargetException e) {
                        log.info(e.getMessage(),e);
                    } catch (SecurityException e) {
                        log.error(e.getMessage(),e);
                    }
                }
            }
        }
        if (clazz.getSuperclass() != null) {
            toMap(clazz.getSuperclass(), object, map);
        }
    }

    public static void main(String[] args)throws Exception {
        Tests tests=new Tests(10,"zhangsan");
        ObjectToMap om= new ObjectToMap();
        Map<String,String> map= om.toMap(tests);
        System.out.println(map.toString());
        Map<String,Object> omap= om.toObjectMap(tests);
        System.out.println(omap.toString());
    }

}
class Tests{
    private int age;
    private String name;

    public Tests(int age,String name) {
        this.age=age;
        this.name=name;
    }
    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_16553883/article/details/81199603

智能推荐

同桌的你之程序员版[摘]_weixin_33681778的博客-程序员宝宝

2019独角兽企业重金招聘Python工程师标准&gt;&gt;&gt; ...

linux简单常用命令及个人总结_Pippo_Liang的博客-程序员宝宝

1.命令提示符[[email protected] ~]#  : 其中root为当前用户名,localhost为主机名,~为当前所在目录,#超级用户提示符,$普通用户提示符。5.cd:进入目录        选项:~ 回到家目录 , - 回到上次目录 ,..回到上级目录  .进入当前目录2.ls [选项] [参数]:查看目录的内容。       选项 :-a 显示所有文件,包括隐藏文件,

JS 里的数据类型(一)_方小圆的博客-程序员宝宝

7种类型数值(Number),基本类型字符串(String),基本类型布尔(Boolean),基本类型null,基本类型undefined,基本类型symbol,基本类型数值JS内部,所有数字都是以64位浮点数形式储存,即使整数也是如此。所以,1与1.0是相同的,是同一个数。JS底层没有整数,所以某些运算只有整数才能完成,此时 JavaScript 会自动把64位浮点数,转...

linux内核分析第五周-分析system_call中断处理过程_weixin_30532369的博客-程序员宝宝

本实验目的:通过以一个简单的menu小程序,跟踪系统调用的过程,分析与总结系统调用的机制和三层进入的过程。实验原理:系统调用处理过程与中断处理的机制系统调用是通过软中断指令 INT 0x80 实现的,而这条INT 0x80指令就被封装在C库的函数中。(软中断和我们常说的硬中断不同之处在于,软中断是由指令触发的,而不是由硬件外设引起的。)INT 0x80 这条指令的执行会让系统跳转到一个预设...

CCNET+MSBuild+SVN实时构建的优化总结_weixin_30258027的博客-程序员宝宝

本文不是介绍如何使用CCNET+MSBuild+SVN构建自动编译系统,相关的内容可以从很多地方获取,可以再园子里搜一下。随着我们的SVN库日益壮大,容量达到10G,几十G 甚至更大时,我们发现自动构建速度越来越慢,直到有一天你发现入了很小一段代码却不得不等待几小时构建完成,程序员的忍受是有极限的,因此我们决定采取措施实施优化。首先,我们必须分析哪些因素导致了我们构建速度的减慢,罗列一下,...

GeoServer学习笔记-4、图层加载(WMSLayer详解)[email protected]柿子树的博客-程序员宝宝_wmslayer

官方API https://developers.arcgis.com/javascript/3/jsapi/wmslayer-amd.html#wmslayer1使用WMSLayer加载WMS服务有两种方式:方式一:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;直接给WMS服务所在的URL地址,在visibleLayers参数中指定要加载的图层(命名...

随便推点

windbg命令_ken_scott的博客-程序员宝宝

windbg命令linux下使用ulimit -S -c unlimited命令,可以使程序崩溃时生成core文件,使用gdb exec_file core_file就可以查看崩溃的程序,接着使用bt就基本可以定位触发崩溃的代码段windows下没有这么方便,但可以使用procexp和windbg来达到相同的目的,程序崩溃后,可以打开procexp,然后在procexp中选择崩溃的程序,右

斯坦福大学自然语言处理第三课“最小编辑距离(Minimum Edit Distance)”_绝对不要看眼睛里的郁金香的博客-程序员宝宝

一、课程介绍斯坦福大学于2012年3月在Coursera启动了在线自然语言处理课程,由NLP领域大牛Dan Jurafsky 和 Chirs Manning教授授课:https://class.coursera.org/nlp/以下是本课程的学习笔记,以课程PPT/PDF为主,其他参考资料为辅,融入个人拓展、注解,抛砖引玉,欢迎大家在“我爱公开课”上一起探讨学习。课件汇

七宗罪之病态的加班_普通网友的博客-程序员宝宝

0 奇怪的事情王小宝今年刚刚大学毕业,经过两轮简单的面试之后,进入了本地一家拥有20多名研发人员的IT企业,终于成为了心目中一直崇拜、向往的程序员。第一天上班,起了个大早,怀着激动的心情,迈着坚实的步伐第一个来到公司,等了十来分钟后才有人过来开门,接着是安排工位、领取入职材料,员工相互介绍,加了公司的微信群,终于入座,松了口气,心里想着,以后我就要在这个地方发光发热了,大干一场了,对自己的第一...

ECMAScript新特性_爱笑的橘子的博客-程序员宝宝

本文章将要收集自ECMAScript2017开始的ECMAScript新特性1.ECMAScript20171.字符串追加:提供了两个字符串追加的方法 String.prototype.padStart 和 String.prototype.padEnd,方便我们将一个新的字符串追加到某个字符串的头尾。'someString'.padStart(numberOfCharcters [,stringForPadding]);'5'.padStart(10) // ' 5''5'.p

webapi获取请求地址的IP_cqzc123的博客-程序员宝宝_webapi 获取ip

References required:HttpContextWrapper - System.Web.dllRemoteEndpointMessageProperty - System.ServiceModel.dllOwinContext - Microsoft.Owin.dll (you will have it already if you use Owin package)复制代...

推荐文章

热门文章

相关标签