Java中Map转对象

项目中用到过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();
// }

	}
}

希望你们能用得上,最后,看完觉得不错,记得关注哦,干货不断…

    原文作者:freedom.西瓜皮
    原文地址: https://blog.csdn.net/qq_41771448/article/details/107764900
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞