对象和Map转化gongju

 1 package czc.superzig.modular.utils;
 2 
 3 import java.lang.reflect.Field;
 4 import java.util.HashMap;
 5 import java.util.Map;
 6 import java.util.regex.Matcher;
 7 import java.util.regex.Pattern;
 8 
 9 /** 对象转Map工具类
10  * <b>
11  * </b><br><br><i>Description</i> :
12  * <br><br>Date: 2019/6/18 ${time}    <br>Author : dxl
13  */
14 public class ObjToMap {
15     private static Pattern linePattern = Pattern.compile("_(\w)");
16     private static Pattern humpPattern = Pattern.compile("[A-Z]");
17 
18     /**
19      * <b>对象转map
20      * @date 2019年7月1日 下午2:53:33    <br><i>author</i> : dxl
21      */
22     public static Map<String, Object> modelToMap(Object obj) {
23 
24         Map<String, Object> map = new HashMap<String, Object>();
25         // 获取f对象对应类中的所有属性域
26         Field[] fields = obj.getClass().getDeclaredFields();
27         for (int i = 0, len = fields.length; i < len; i++) {
28             String varName = fields[i].getName();
29             if("serialVersionUID".equals(varName)){
30                 continue;
31             }
32             //将key置为小写,默认为对象的属性
33              varName = humpToLine(varName).toString();
34             try {
35                 // 获取原来的访问控制权限
36                 boolean accessFlag = fields[i].isAccessible();
37                 // 修改访问控制权限
38                 fields[i].setAccessible(true);
39                 // 获取在对象f中属性fields[i]对应的对象中的变量
40                 Object o = fields[i].get(obj);
41                 if (o != null){
42                     map.put(varName, o);}
43                 // System.out.println("传入的对象中包含一个如下的变量:" + varName + " = " + o);
44                 // 恢复访问控制权限
45                 fields[i].setAccessible(accessFlag);
46             } catch (IllegalArgumentException ex) {
47                 ex.printStackTrace();
48             } catch (IllegalAccessException ex) {
49                 ex.printStackTrace();
50             }
51         }
52         return map;
53     }
54     /** 下划线转驼峰 */
55     public static String lineToHump(String str) {
56         str = str.toLowerCase();
57         Matcher matcher = linePattern.matcher(str);
58         StringBuffer sb = new StringBuffer();
59         while (matcher.find()) {
60             matcher.appendReplacement(sb, matcher.group(1).toUpperCase());
61         }
62         matcher.appendTail(sb);
63         return sb.toString();
64     }
65     /** 驼峰转下划线,效率比上面高 */
66     public static String humpToLine(String str) {
67         Matcher matcher = humpPattern.matcher(str);
68         StringBuffer sb = new StringBuffer();
69         while (matcher.find()) {
70             matcher.appendReplacement(sb, "_" + matcher.group(0).toLowerCase());
71         }
72         matcher.appendTail(sb);
73         return sb.toString();
74     }
75 }
View Code
原文地址:https://www.cnblogs.com/xiatc/p/12362855.html