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