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();
//		}

	}
}

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值