package czc.superzig.modular.utils;

 import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern; /** 对象转Map工具类
* <b>
* </b><br><br><i>Description</i> :
* <br><br>Date: 2019/6/18 ${time} <br>Author : dxl
*/
public class ObjToMap {
private static Pattern linePattern = Pattern.compile("_(\\w)");
private static Pattern humpPattern = Pattern.compile("[A-Z]"); /**
* <b>对象转map
* @date 2019年7月1日 下午2:53:33 <br><i>author</i> : dxl
*/
public static Map<String, Object> modelToMap(Object obj) { Map<String, Object> map = new HashMap<String, Object>();
// 获取f对象对应类中的所有属性域
Field[] fields = obj.getClass().getDeclaredFields();
for (int i = 0, len = fields.length; i < len; i++) {
String varName = fields[i].getName();
if("serialVersionUID".equals(varName)){
continue;
}
//将key置为小写,默认为对象的属性
varName = humpToLine(varName).toString();
try {
// 获取原来的访问控制权限
boolean accessFlag = fields[i].isAccessible();
// 修改访问控制权限
fields[i].setAccessible(true);
// 获取在对象f中属性fields[i]对应的对象中的变量
Object o = fields[i].get(obj);
if (o != null){
map.put(varName, o);}
// System.out.println("传入的对象中包含一个如下的变量:" + varName + " = " + o);
// 恢复访问控制权限
fields[i].setAccessible(accessFlag);
} catch (IllegalArgumentException ex) {
ex.printStackTrace();
} catch (IllegalAccessException ex) {
ex.printStackTrace();
}
}
return map;
}
/** 下划线转驼峰 */
public static String lineToHump(String str) {
str = str.toLowerCase();
Matcher matcher = linePattern.matcher(str);
StringBuffer sb = new StringBuffer();
while (matcher.find()) {
matcher.appendReplacement(sb, matcher.group(1).toUpperCase());
}
matcher.appendTail(sb);
return sb.toString();
}
/** 驼峰转下划线,效率比上面高 */
public static String humpToLine(String str) {
Matcher matcher = humpPattern.matcher(str);
StringBuffer sb = new StringBuffer();
while (matcher.find()) {
matcher.appendReplacement(sb, "_" + matcher.group(0).toLowerCase());
}
matcher.appendTail(sb);
return sb.toString();
}
}

最新文章

  1. 大熊君学习html5系列之------History API(SPA单页应用的必备)
  2. SQLite返回码
  3. 随机函数的代码(srand、rand)
  4. 项目总结笔记系列 Social Hub KT Session1
  5. view类的setVisibility
  6. canvas时钟
  7. uwp项目总结
  8. Node 进阶:express 默认日志组件 morgan 从入门使用到源码剖析
  9. linux下单节点oracle数据库间ogg搭建
  10. 使用安卓读取sqlite数据库方法记录
  11. Firefly官方教程之Distributed使用文档
  12. hadoop 学习笔记 (十) mapreduce2.0
  13. MEMS陀螺仪—MEMS产品中的杀手
  14. 第一个关于ajax的代码
  15. 字符编码笔记:ASCII,Unicode和UT…
  16. Holding Bin-Laden Captive!(1.多重背包 2.母函数)
  17. C# .Net 中字典Dictionary&lt;TKey,TValue&gt;泛型类 学习浅谈
  18. MongoDB超级简明入门教程
  19. hdoj4685
  20. C# 防止窗体闪烁

热门文章

  1. Springboot的多环境配置
  2. git和github的关系以及简单易懂的理解
  3. js和jsp中怎么去获取后台 model.addAttribute()存入的list&lt;。。。&gt;对象
  4. unittest 测试套件使用汇总篇
  5. JAVA 中集合ConcurrentMap
  6. 种树-洛谷P1250(差分约束)
  7. numpy函数hstack,vstack,dstack简介
  8. Python分析盘点2019全球流行音乐:是哪些歌曲榜单占领了我们?
  9. composer基本命令
  10. hash路由