zoukankan      html  css  js  c++  java
  • 对象和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
  • 相关阅读:
    [hdu1402]A * B Problem Plus(NTT)
    拦截导弹问题(Noip1999)
    删数问题(Noip1994)
    1217:棋盘问题
    随笔功能测试
    教师派8
    教师派7
    教师派6
    教师派5
    教室派4
  • 原文地址:https://www.cnblogs.com/xiatc/p/12362855.html
Copyright © 2011-2022 走看看