import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map; /**
* 用于对javabean和map之间的相互装换的工具类
*/
public class BeanMapConvertUtils { /**
* 将Map转为javaBean
*/
public static <T> T mapToObject(Map<String, Object> map, Class<T> beanClass) {
if (map == null)
return null;
T obj = null;
BeanInfo beanInfo = null;
try {
obj = beanClass.newInstance();
beanInfo = Introspector.getBeanInfo(obj.getClass());
} catch (IntrospectionException | InstantiationException | IllegalAccessException e) {
e.printStackTrace();
return null; // 如果在创建实例和获取beaninfo出现异常则直接返回null
}
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
for (PropertyDescriptor property : propertyDescriptors) {
Method setter = property.getWriteMethod();
if (setter != null) {
String key = property.getName();
try {
setter.invoke(obj, map.get(key));
} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
}
}
}
return obj;
} /**
* @Description: 将Map转为javaBean
* @param map 要转换的map对象
* @param beanClass 需要转成的javabean的class
* @param requiredPropertys 需要转换后包含的属性名集合
*/
public static <T> T mapToObject(Map<String, Object> map, Class<T> beanClass, Collection<String> requiredPropertys) {
if (map == null)
return null;
T obj = null;
BeanInfo beanInfo = null;
try {
obj = beanClass.newInstance();
beanInfo = Introspector.getBeanInfo(obj.getClass());
} catch (IntrospectionException | InstantiationException | IllegalAccessException e) {
e.printStackTrace();
return null; // 如果在创建实例和获取beaninfo出现异常则直接返回null
}
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
for (PropertyDescriptor property : propertyDescriptors) {
Method setter = property.getWriteMethod();
if (setter != null) {
String key = property.getName();
if (requiredPropertys != null && !requiredPropertys.contains(key)) {// 如果不包含需要的属性则跳过
continue;
}
try {
setter.invoke(obj, map.get(key));
} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
}
}
}
return obj;
} /**
* 将javabean集合转为map集合
* @param objList avabean集合
* @param requiredPropertys 需要转换后包含的属性名集合
*/
public static List<Map<String, Object>> objectsToMaps(Collection<?> objList, Collection<String> requiredPropertys) {
List<Map<String, Object>> arrayList = new ArrayList<Map<String, Object>>();
if (objList != null) {
for (Object obj : objList) {
Map<String, Object> objectToMap = objectToMap(obj, requiredPropertys);
if (objectToMap != null) {
arrayList.add(objectToMap);
}
}
}
return arrayList;
} /**
* 将javaBean转为Map
*/
public static Map<String, Object> objectToMap(Object obj) {
if (obj == null)
return null;
Map<String, Object> map = new HashMap<String, Object>();
try {
BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
for (PropertyDescriptor property : propertyDescriptors) {
String key = property.getName();
if (key.compareToIgnoreCase("class") == 0) {
continue;
}
Method getter = property.getReadMethod();
Object value = getter != null ? getter.invoke(obj) : null;
map.put(key, value);
}
} catch (Exception e) {
map = null;
e.printStackTrace();
}
return map;
} /**
* 将Map转为javaBean
* @param obj 要转换的javabean对象
* @param requiredPropertys 需要转换后包含的属性名集合
*/
public static Map<String, Object> objectToMap(Object obj, Collection<String> requiredPropertys) {
if (obj == null)
return null;
Map<String, Object> map = new HashMap<String, Object>();
try {
BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
for (PropertyDescriptor property : propertyDescriptors) {
String key = property.getName();
if (key.compareToIgnoreCase("class") == 0) {
continue;
}
if (requiredPropertys != null && !requiredPropertys.contains(key)) {// 如果不包含需要的属性则跳过
continue;
}
Method getter = property.getReadMethod();
Object value = getter != null ? getter.invoke(obj) : null;
map.put(key, value);
}
} catch (Exception e) {
map = null;
e.printStackTrace();
}
return map;
}
}

Java-实体与集合转换的更多相关文章

  1. JAVA常用的集合转换

    在Java应用中进行集合对象间的转换是非常常见的事情,有时候在处理某些任务时选择一种好的数据结构往往会起到事半功倍的作用,因此熟悉每种数据结构并知道其特点对于程序员来说是非常重要的,而只知道这些是不够 ...

  2. 利用JAXB实现java实体类和xml互相转换

    1.应用场景 在使用WebService实现数据上传下载,数据查询时,可以利用JAXB实现java实体类和xml互相转换 2.Demo 2.1 student.java 实体类,包含list(set同 ...

  3. 【Java 8】 集合间转换工具——Stream.collect

    集合运算 交集 (list1 + list2) List<T> intersect = list1.stream() .filter(list2::contains) .collect(C ...

  4. 将java类的泛型集合转换成json对象

    一般用extjs开发传输都是用json比较多,这个将来大家也许会用到... ConvertJsonUtils.java package com.sunweb.util.jsonfactory; imp ...

  5. Gson把json串转换成java实体对象

    Gson把json串转换成java实体对象的方法如下: 1.首先导入Gson的jar包,网上可以下载. java实体对象如下: public class Model { private double ...

  6. java 字符串和集合互相转换

    今天在写项目的时候遇到一个问题,就是要把得到的一个集合转换成字符串,发现 import org.apache.commons.lang.StringUtils; 有这么一个简单的方法:String s ...

  7. 生成二维码 加密解密类 TABLE转换成实体、TABLE转换成实体集合(可转换成对象和值类型) COOKIE帮助类 数据类型转换 截取字符串 根据IP获取地点 生成随机字符 UNIX时间转换为DATETIME\DATETIME转换为UNIXTIME 是否包含中文 生成秘钥方式之一 计算某一年 某一周 的起始时间和结束时间

    生成二维码 /// <summary>/// 生成二维码/// </summary>public static class QRcodeUtils{private static ...

  8. Json——使用Json jar包实现Json字符串与Java对象或集合之间的互相转换

    总结一下利用Json相关jar包实现Java对象和集合与Json字符串之间的互相转换: 1.创建的User类: package com.ghj.packageofdomain; public clas ...

  9. 多年前写的DataTable与实体类的转换,已放github

    本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,SourceLink 阅读目录 介绍 起因 代码 UnitTest G ...

  10. DataTable与实体类的转换

    多年前写的DataTable与实体类的转换,已放github 阅读目录 介绍 起因 代码 UnitTest GitHub 介绍 很多年前一直使用Ado.net,后来慢慢转型到其他的orm,在转型过程中 ...

随机推荐

  1. 使用AWK分析Oracle系统锁定、Hang状态

    在早期Oracle版本中,由于技术不成熟等原因,数据库锁定和僵死状态还是时有发生的.对待这些问题,老先生们的处理策略无外乎是“重启”和“考究”两种策略.所谓“重启”,通过强制的重启服务器或者数据库,将 ...

  2. 洛谷【P4551】最长异或路径

    浅谈\(Trie\):https://www.cnblogs.com/AKMer/p/10444829.html 题目传送门:https://www.luogu.org/problemnew/show ...

  3. php 常用方法

    //返回json数据给js function json_output($err_code = 0 , $error_message = '' , $data = [] , $redirect = '' ...

  4. ubuntu64,ndk-r9 编译 ffmpeg 2.1.1的config文件

    #!/bin/bash NDK_ROOT=/home/wjh/fox/android-ndk-r9c/ PREBUILT=${NDK_ROOT}toolchains/arm-linux-android ...

  5. [Java.Web][Servlet]常用请求头

    response.setStatus(302); response.setHeader("location", "/day04/1.html"); 这段代码可以 ...

  6. zookeeper的四种类型的节点

    znode创建类型(CreateMode),有以下四种: PERSISTENT 持久化节点 PERSISTENT_SEQUENTIAL 顺序自动编号持久化节点,这种节点会根据当前已存在的节点数自动加 ...

  7. java程序中的ibatis连接mySql的基本实例

    属性文件:SqlMap.properties driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/ibatis username= ...

  8. mysql where语句中 or 和 and连用注意点

    在mysql中,经常会遇到这样的情况,在写条件语句where时,可能会同时有多个条件的“或”或者“与”,但经常会达不到效果,经百度,本人发现一个where语句中同时出现条件的“与”或者“或的时候”,要 ...

  9. Linux 为FTP 服务器添加iptables规则--案例分析

    一.故障描述 由于开发提出需求,为他们搭建内部ftp服务器,搭建好后,提交给他们,测试可以正常使用.后来过了一段时间后,有一天无法登陆了.于是去ftp主机上检查问题,ftp的配置文件没有改动,端口监听 ...

  10. OD 实验(六) - 对一个程序的破解

    程序: 双击进行安装,安装过程默认就好了 安装完成 运行程序 输入 User 为 sch01ar,点击 Create 点击 Log In 这里显示为未注册版本 看看未注册版本有哪些功能被限制 这里会显 ...