简单的map转换成Bean的工具
简单的map转换成Bean的工具
package com.sd.microMsg.util; import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Set; public class MapUtil { /**
* map 转 Bean
*
* @param mpFrom
* @param objTo
* @return
*/
public static Object mapToBean(Map mpFrom, Object objTo) {
Object[] objKeys = mpFrom.keySet().toArray();
String strFieldName = ""; try {
for (Object objkey : objKeys) {
strFieldName = objkey.toString(); Field objField = objTo.getClass().getDeclaredField(
strFieldName.toLowerCase());
objField.setAccessible(true); objField.set(objTo, mpFrom.get(strFieldName));
}
} catch (Exception e) {
e.printStackTrace();
}
return objTo;
} /**
* map 转 Bean
*
* @param map
* @param cls
* @return
*/
public static Object mapToBean(Map map, Class cls) {
Object obj = null;
try {
obj = cls.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
// 取出bean里的所有方法
Method[] methods = cls.getMethods();
for (int i = 0; i < methods.length; i++) {
// 取方法名
String method = methods[i].getName();
// 取出方法的类型
Class[] cc = methods[i].getParameterTypes();
if (cc.length != 1)
continue; // 如果方法名没有以set开头的则退出本次for
if (method.indexOf("set") < 0)
continue;
// 类型
String type = cc[0].getSimpleName(); try {
// 转成小写
// Object value = method.substring(3).toLowerCase();
String methodAliasName = method.substring(3, 4).toLowerCase()
+ method.substring(4);
System.out.println("methodAliasName == " + methodAliasName);
// if (map.containsKey(methodAliasName) &&
// map.get(methodAliasName) != null) { // }
// 如果map里有该key
Set<String> set = map.keySet();
for (String key : set) {
if (methodAliasName.equalsIgnoreCase(key)) {
// 调用其底层方法
setValue(type, map.get(key), i, methods,
obj); }
} } catch (Exception e) {
e.printStackTrace();
}
}
return obj;
} /***************************************************************************
* 调用底层方法设置值
*/
private static void setValue(String type, Object value, int i,
Method[] method, Object bean) {
if (value != null && !value.equals("")) {
try {
if (type.equals("String")) {
// 第一个参数:从中调用基础方法的对象 第二个参数:用于方法调用的参数
method[i].invoke(bean, new Object[] { value });
} else if (type.equals("int") || type.equals("Integer")) {
method[i].invoke(bean, new Object[] { new Integer(""
+ value) });
} else if (type.equals("double") || type.equals("Double")) {
method[i].invoke(bean,
new Object[] { new Double("" + value) });
} else if (type.equals("float") || type.equals("Float")) {
method[i].invoke(bean,
new Object[] { new Float("" + value) });
} else if (type.equals("long") || type.equals("Long")) {
method[i].invoke(bean,
new Object[] { new Long("" + value) });
} else if (type.equals("boolean") || type.equals("Boolean")) {
method[i].invoke(bean,
new Object[] { Boolean.valueOf("" + value) });
} else if (type.equals("BigDecimal")) {
method[i].invoke(bean, new Object[] { new BigDecimal(""
+ value) });
} else if (type.equals("Date")) {
Date date = null;
if (value.getClass().getName().equals("java.util.Date")) {
date = (Date) value;
} else {
String format = ((String) value).indexOf(":") > 0 ? "yyyy-MM-dd hh:mm:ss"
: "yyyy-MM-dd";
SimpleDateFormat sf = new SimpleDateFormat();
sf.applyPattern(format);
date = sf.parse((String) (value));
}
if (date != null) {
method[i].invoke(bean, new Object[] { date });
}
} else if (type.equals("byte[]")) {
method[i].invoke(bean,
new Object[] { new String(value + "").getBytes() });
}
} catch (Exception e) {
System.out
.println("将linkHashMap 或 HashTable 里的值填充到javabean时出错,请检查!");
e.printStackTrace();
}
}
} public static void main(String[] args) {
User user = new User();
Map map = new HashMap();
map.put("userId", "123");
map.put("userName", "userName123");
map.put("userTel", "userTel123");
map.put("age", 234);
map.put("create", new Date());
map.put("money", new BigDecimal(123).setScale(2));
map.put("score", 23.33323);
Long start = System.currentTimeMillis();
user = (User) mapToBean(map, user.getClass());
Long end = System.currentTimeMillis();
System.out.println(" 用时 == " + (end - start));
System.out.println(user.toString());
}
}
简单的map转换成Bean的工具的更多相关文章
- 泛型(二)封装工具类CommonUtils-把一个Map转换成指定类型的javabean对象
1.commons-beanutils的使用 commons-beanutils-1.9.3.jar 依赖 commons-logging-1.2.jar 代码1: String className ...
- map转换成list
Java代码如下: package Test01; import java.util.ArrayList; import java.util.HashMap; import java.util.Ite ...
- Map 转换成byte[] 数组
把Map转换成byte数组,使用 ByteArrayOutputStream和ObjectOutputStream Map<String,String> map = new HashMap ...
- 使用 js 实现一个中文自动转换成拼音的工具库
使用 js 实现一个中文自动转换成拼音的工具库 中文 => zhong-wen 应用场景 SEO 友好, URL 自动转换 blogs 发布文章,自动化部署,自动生成 url 的 path (时 ...
- java list map转换成二维数组
/** * *@Title: ListToArray *@Description: list列表转换成二维数组 *@Author: Administrator *@Since: 2018年1月7日下午 ...
- 使用fastjson将list、map转换成json,出现$ref
这是转换时出现的问题情况( map >> json ) 引用是通过"$ref"来表示的 引用 描述 "$ref":".." 上一 ...
- js将map转换成数组
/** * map转数组. * * @param {Map}map * map对象 * @return 数组 */ Share.map2Ary = function(map) { var list = ...
- map转换成JSON的3种方法
http://www.json.cn/JSON格式校验 1 json-lib <dependency> <groupId>net.sf.json-lib</groupId ...
- map转换成com.google.gson.JsonObject
String json =new Gson().toJson(map); JsonObject jsonObject =new JsonParser().parse(json).getAsJsonOb ...
随机推荐
- a链接中关于this的使用
a连接点击事件用 this 时,要用 onclick='click(this)',href='javascript:void()' a连接无法使用,要看看是不是自动变成ie7或者更低
- [转].net连oracle的问题及方法折腾总结 连接字串
本文转自:http://www.th7.cn/Program/net/201305/138265.shtml 对oracle不算熟,对.net结合oracle开发项目也只做过一个.最近换了新电脑,装了 ...
- Android Dialog(对话框)
一个对话框一般是一个出现在当前Activity之上的一个小窗口. 处于下面的Activity失去焦点, 对话框接受所有的用户交互. 对话框一般用于提示信息和与当前应用程序直接相关的小功能. Andro ...
- Android的几种alert对话框
@Override public void onClick(View v) { switch (v.getId()) { case R.id.d1: AlertDialog.Builder build ...
- java.util.concurrent 多线程框架
http://daoger.iteye.com/blog/142485 JDK5中的一个亮点就是将Doug Lea的并发库引入到Java标准库中.Doug Lea确实是一个牛人,能教书,能出书,能编码 ...
- 【HTML XHTML CSS基础教程(第6版)】笔记之HTML XHTML笔记(1~6章)
第1章 网页的构造块 1.(X)HTML有三种主要的标记类型:元素,属性,值. 2.浏览器主要通过查看文件的扩展名(.htm或.html)来得知应该按照网页的方式读取文本文件. 3.H ...
- c# 单例模式[Singleton]之深夜闲聊
都有点记不起认识单例模式(也有叫单件模式的)是在什么时候了,有时候东西认多了不常用的话也经常抛之脑后甚至逐渐从大脑里被移除.不闲扯了,直接入正题吧. 什么是单例模式? 保证在整个应用程序的生命周期中, ...
- cocos2d-x实战 C++卷 学习笔记--第4章 字符串 __String类
前言: <cocos2d-x实战C++卷>学习笔记.(cocos2d-x 是3.0版本) 介绍 cocos2d-x 通用的字符串类 __String . 使用cocos2d::__Str ...
- 开启或关闭SQLSERVER服务的bat文件
界面如下: 因为电脑的SQLSERVER服务没有自己启动,有时候又需要关闭SQLSERVER服务,就自己在网上找了下教程. 源码如下: @echo offchoice /t 3 /c yn /d y ...
- OC6_字符串练习
// // QFString.h // OC6_字符串练习 // // Created by zhangxueming on 15/6/10. // Copyright (c) 2015年 zhang ...