项目中用到过map转对象,之前偶尔看过同事的代码,使用map转对象时,做循环、拿值、判空、赋值,对象参数少偶尔可以用一下,如果对象参数过多,啧啧啧,那就是一条壮丽的风景线,所以自己整理了下,出一个map转对象的工具类
package com.util;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.converters.BigDecimalConverter;
import org.apache.commons.beanutils.converters.DateConverter;
import org.apache.commons.beanutils.converters.DoubleConverter;
import org.apache.commons.beanutils.converters.IntegerConverter;
import org.apache.commons.beanutils.converters.LongConverter;
import org.apache.commons.beanutils.converters.ShortConverter;
/**
* Map转对象 对象转Map 工具类
* @version V1.0
*/
public class MapUtilz {
/**
* Map 转对象
*
* @param map
* @param beanClass
* @return
* @throws Exception
*/
public static Object mapToObject(Map<String, Object> map, Class<?> beanClass)
throws Exception {
if (map == null)
return null;
Object obj = beanClass.newInstance();
ConvertUtils.register(new DateConverter(null), java.util.Date.class);
ConvertUtils.register(new LongConverter(null), Long.class);
ConvertUtils.register(new ShortConverter(null), Short.class);
ConvertUtils.register(new IntegerConverter(null), Integer.class);
ConvertUtils.register(new DoubleConverter(null), Double.class);
ConvertUtils.register(new BigDecimalConverter(null), BigDecimal.class);
org.apache.commons.beanutils.BeanUtils.populate(obj, map);
return obj;
}
/**
* 对象转Map
*
* @param obj
* @param incDate
* 是否包含Date 类型的属性 true 包含; false 不包含
* @return
*/
public static Map<?, ?> objectToMap(Object obj, boolean incDate) {
if (obj == null)
return null;
if(incDate)
ConvertUtils.register(new DateConverter(null), java.util.Date.class);
return new org.apache.commons.beanutils.BeanMap(obj);
}
/**
* map转map转对象,将带有下划线key,改编为驼峰式key
* @return Map<?,?>
* @param map
* @return
* @throws Exception
*
*/
public static Object mapToMapToObject(Map<?, ?> map,Class<?> beanClass) throws Exception{
Map<String, Object> mapp=new HashMap<String, Object>();
//map遍历
for (Map.Entry<?, ?> entry : map.entrySet()) {
//处理下划线
if(entry.getKey().toString().contains("_")){
Object value = entry.getValue();
String[] arr = entry.getKey().toString().split("_");
StringBuffer sb = new StringBuffer();
sb.append(arr[0]);
for (int i=1;i<arr.length;i++){
arr[i]=arr[i].substring(0, 1).toUpperCase() + arr[i].substring(1);
//合并字符串
sb.append(arr[i]);
}
String key = sb.toString();
mapp.put(key, value);
}else {
//不做处理部分
String key = entry.getKey().toString();
Object value = entry.getValue();
mapp.put(key, value);
}
}
Object obj = mapToObject(mapp, beanClass);
return obj;
}
/**
*
* @param args
*/
public static void main(String[] args) {
// Student s = new Student();
//
// s.setAaa("aaa");
// s.setBbb("bbb");
// s.setFff(new BigDecimal("123.456"));
// // s.setCcc(new Integer(2));
// // s.setDdd(new Double(5.0));
// // s.setEee( new Date());
//
// Map map = MapUtilz.objectToMap(s, true);
// System.out.println(map.get("iii"));
//
// try {
//
// Student ss = (Student) MapUtilz.mapToObject(map, Student.class);
// System.out.println(ss.getGgg());
// } catch (Exception e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
}
}
希望你们能用得上,最后,看完觉得不错,记得关注哦,干货不断…