创建对象User

package com.xqc;
 
import java.util.Date;
 
public class User {
    /**
     *
     * ID
     */
    private Integer id;
    /**
     *
     * 用户名
     */
    private String userName;
    /**
     *
     * 岗位ID
     */
    private Long jobId;
    /**
     * 生日
     */
    private Date birthday;
    /**
     *
     * 薪水
     */
    private Double salary;
 
    public Integer getId() {
        return id;
    }
 
    public void setId(Integer id) {
        this.id = id;
    }
 
    public String getUserName() {
        return userName;
    }
 
    public void setUserName(String userName) {
        this.userName = userName;
    }
 
    public Long getJobId() {
        return jobId;
    }
 
    public void setJobId(Long jobId) {
        this.jobId = jobId;
    }
 
    public Date getBirthday() {
        return birthday;
    }
 
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
 
    public Double getSalary() {
        return salary;
    }
 
    public void setSalary(Double salary) {
        this.salary = salary;
    }
 
    public User setUser(){
        User user = new User();
        user.setId(123);
        user.setUserName("王二");
        user.setSalary(2344.4D);
        user.setBirthday(new Date());
        user.setJobId(99999L);
        return user;
    }
}

1.使用反射

import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;
 
/**
 *使用反射
 */
public class Method01 {
    public static void main(String[] args) {
        long s1 = System.currentTimeMillis();
        Map<String, Object> dataMap = objectToMap(new User().setUser());
        long s2 = System.currentTimeMillis();
        System.out.println("花费时间毫秒:"+(s2-s1));
        System.out.println(dataMap);
    }
 
    public static Map<String, Object> objectToMap(Object object){
        Map<String,Object> dataMap = new HashMap<>();
        Class<?> clazz = object.getClass();
        for (Field field : clazz.getDeclaredFields()) {
            try {
                field.setAccessible(true);
                dataMap.put(field.getName(),field.get(object));
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }
        return dataMap;
    }
}

执行多次耗时一般在4-7毫秒左右

2.使用org.apache.commons.beanutils包下的BeanUtils.describe()方法,需要引入commons-beanutils包

import org.apache.commons.beanutils.BeanUtils;
import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
import java.util.Map;
 
public class Method02 {
 
    public static void main(String[] args) {
        long s1 = System.currentTimeMillis();
        Map<String, String> dataMap = objectToMap(new User().setUser());
        long s2 = System.currentTimeMillis();
        System.out.println("花费时间毫秒:"+(s2-s1));
        System.out.println(dataMap);
    }
 
    public static Map<String, String> objectToMap(Object object){
        try {
            Map<String, String> dataMap = BeanUtils.describe(object);
            dataMap.remove("class");//移除多出来的class字段
            return dataMap;
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        }
        return new HashMap<>();
    }
}

执行多次耗时一般在150毫秒左右,甚至更多

3.直接使用put方法往map对象里一个个赋值

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

public class Method03 {
    public static void main(String[] args) {
        long s1 = System.currentTimeMillis();
        User user = new User().setUser();
        Map<String,Object> dataMap = new HashMap<>();
        dataMap.put("id",user.getId());
        dataMap.put("userName",user.getUserName());
        dataMap.put("salary",user.getSalary());
        dataMap.put("birthday",user.getBirthday());
        dataMap.put("jobId",user.getJobId());
        long s2 = System.currentTimeMillis();
        System.out.println("花费时间毫秒:"+(s2-s1));
        System.out.println(dataMap);
    }
}

执行多次耗时一般在3-9毫秒左右

4.使用BeanMap.create方法,需要引入spring相关jar

import org.apache.commons.beanutils.BeanUtils;
import org.springframework.cglib.beans.BeanMap;

import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
import java.util.Map;

public class Method04 {
    public static void main(String[] args) {
        long s1 = System.currentTimeMillis();
        Map<String, Object> dataMap = objectToMap(new User().setUser());
        long s2 = System.currentTimeMillis();
        System.out.println("花费时间毫秒:"+(s2-s1));
        System.out.println(dataMap);
    }

    public static Map<String, Object> objectToMap(Object object){
        Map<String,Object> dataMap = new HashMap<>();
        BeanMap beanMap = BeanMap.create(object);
        for (Object key : beanMap.keySet()) {
            dataMap.put(key+"",beanMap.get(key));
        }
        return dataMap;
    }
}

执行多次耗时一般在180-280毫秒之间,甚至更多

 

 

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐