java对象和Map之间互相转换的三种实现方式
来源:互联网 发布:红警3 for mac版 编辑:程序博客网 时间:2024/05/23 07:24
java对象和Map之间互相转换的三种实现方式
1:测试类
package com.test.java;import java.beans.BeanInfo;import java.beans.Introspector;import java.beans.PropertyDescriptor;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.lang.reflect.Modifier;import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Map.Entry;import java.util.Set;/** * java对象和Map之间的互相转换的三种实现方式 * @author * */public class PojoToMap {public static void main(String[] args) throws Exception {//beanutilMmapToPojo();//beanutilPojoToMap();//IntrospectorMapToObject();//IntrospectorObjectToMap();//ReflectMapToObject();//ReflectObjectToMap();}/** * 转换测试函数(MapToObject) * @throws Exception */public static void beanutilMmapToPojo() throws Exception{Map<String,Object> map = new HashMap<String, Object>();List<String> interests = new ArrayList<String>();interests.add("足球");interests.add("篮球");map.put("age", 25);map.put("name", "张国荣");map.put("sex", "男");map.put("interests", interests);Person p = (Person) MapAndPojoChang.mapToObject(map, Person.class);for(String interest:p.getInterests()){System.out.println(interest);}}/** * Introspector转换测试函数(MapToObject) * @throws Exception */public static void IntrospectorObjectToMap() throws Exception{Map<String, Object> personMap = MapAndPojoChangByIntrospector.objectToMap(buildPerson());if(!personMap.isEmpty()){Set<Entry<String, Object>> entrySet = personMap.entrySet();Iterator<Entry<String, Object>> iterator = entrySet.iterator();for(int i = 0;i<entrySet.size();i++){if(iterator.hasNext()){Entry<String, Object> next = iterator.next();if(next.getKey().equals("class")){continue;}else{System.out.println(next.getValue());}}}}}/** * Reflect转换测试函数(MapToObject) * @throws Exception */public static void ReflectObjectToMap() throws Exception{Map<String, Object> personMap = MapAndPojoChangByReflect.objectToMap(buildPerson());if(!personMap.isEmpty()){Set<Entry<String, Object>> entrySet = personMap.entrySet();Iterator<Entry<String, Object>> iterator = entrySet.iterator();for(int i = 0;i<entrySet.size();i++){if(iterator.hasNext()){Entry<String, Object> next = iterator.next();if(next.getKey().equals("class")){continue;}else{System.out.println(next.getValue());}}}}}/** * Reflect转换测试函数(MapToObject) * @throws Exception */public static void ReflectMapToObject() throws Exception{Person person = (Person)MapAndPojoChangByReflect.mapToObject(buildPersonMap(), Person.class);if(person!=null){String str = "姓名:--"+person.getName()+","+"年龄:--"+person.getAge()+","+"性别:--"+person.getSex()+",";for(String interest:person.getInterests()){if(str.contains("兴趣:")){str.replaceAll("兴趣:", "");str = str+interest;}else{str = str+="兴趣:"+interest;}}System.out.println(str);}}/** * Introspector转换测试函数(MapToObject) * @throws Exception */public static void IntrospectorMapToObject() throws Exception{Person person = (Person)MapAndPojoChangByIntrospector.mapToObject(buildPersonMap(), Person.class);if(person!=null){String str = "姓名:--"+person.getName()+","+"年龄:--"+person.getAge()+","+"性别:--"+person.getSex()+",";for(String interest:person.getInterests()){if(str.contains("兴趣:")){str.replaceAll("兴趣:", "");str = str+interest;}else{str = str+="兴趣:"+interest;}}System.out.println(str);}}/** * 转换测试函数(ObjectToMap) */public static void beanutilPojoToMap() throws Exception{Person person = new Person();person.setAge(25);person.setName("张国荣");person.setSex("男");List<String> interests = new ArrayList<String>();interests.add("足球");interests.add("篮球");person.setInterests(interests);@SuppressWarnings("unchecked")Map<String,Object> map = (Map<String, Object>) MapAndPojoChang.objectToMap(person);if(!map.isEmpty()){Set<Entry<String, Object>> entrySet = map.entrySet();Iterator<Entry<String, Object>> iterator = entrySet.iterator();for(int i = 0;i<entrySet.size();i++){if(iterator.hasNext()){Entry<String, Object> next = iterator.next();if(next.getKey().equals("class")){continue;}else{System.out.println(next.getValue());}}}}}/** * 构建Person * @return */public static Person buildPerson(){Person person = new Person();person.setAge(25);person.setName("张国荣");person.setSex("男");List<String> interests = new ArrayList<String>();interests.add("足球");interests.add("篮球");person.setInterests(interests);return person;}public static Map<String,Object> buildPersonMap(){Map<String,Object> map = new HashMap<String, Object>();List<String> interests = new ArrayList<String>();interests.add("足球");interests.add("篮球");map.put("age", 25);map.put("name", "张国荣");map.put("sex", "男");map.put("interests", interests);return map;}}class MapAndPojoChang { public static Object mapToObject(Map<String, Object> map, Class<?> beanClass) throws Exception { if (map == null) return null; Object obj = beanClass.newInstance(); org.apache.commons.beanutils.BeanUtils.populate(obj, map); return obj; } public static Map<?, ?> objectToMap(Object obj) { if(obj == null) return null; return new org.apache.commons.beanutils.BeanMap(obj); } } class MapAndPojoChangByIntrospector { public static Object mapToObject(Map<String, Object> map, Class<?> beanClass) throws Exception { if (map == null) return null; Object obj = beanClass.newInstance(); BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass()); PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors(); for (PropertyDescriptor property : propertyDescriptors) { Method setter = property.getWriteMethod(); if (setter != null) { setter.invoke(obj, map.get(property.getName())); } } return obj; } public static Map<String, Object> objectToMap(Object obj) throws Exception { if(obj == null) return null; Map<String, Object> map = new HashMap<String, Object>(); 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); } return map; } } class MapAndPojoChangByReflect { public static Object mapToObject(Map<String, Object> map, Class<?> beanClass) throws Exception { if (map == null) return null; Object obj = beanClass.newInstance(); Field[] fields = obj.getClass().getDeclaredFields(); for (Field field : fields) { int mod = field.getModifiers(); if(Modifier.isStatic(mod) || Modifier.isFinal(mod)){ continue; } field.setAccessible(true); field.set(obj, map.get(field.getName())); } return obj; } public static Map<String, Object> objectToMap(Object obj) throws Exception { if(obj == null){ return null; } Map<String, Object> map = new HashMap<String, Object>(); Field[] declaredFields = obj.getClass().getDeclaredFields(); for (Field field : declaredFields) { field.setAccessible(true); map.put(field.getName(), field.get(obj)); } return map; } }
Person实体类
package com.test.java;import java.util.List;public class Person {private int age;private String name;private String sex;private List<String> interests;public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public List<String> getInterests() {return interests;}public void setInterests(List<String> interests) {this.interests = interests;}}
阅读全文
0 0
- java对象和Map之间互相转换的三种实现方式
- json:java对象和json对象之间的互相转换
- Java对象和集合与Json之间的互相转换
- Java关于实体对象和Map对象之间的转换
- Map 与 JavaBean 之间转换的三种方式
- Java 实现 Map 和 Object 互相转换的几种方法
- java 使用BeanInfo实现bean实体与map之间的互相转换
- java对象和json对象之间互相转换
- java对象和json对象之间互相转换
- java对象和json对象之间互相转换
- java对象和json对象之间互相转换
- java对象和json对象之间互相转换
- java对象和json对象之间互相转换
- java对象和json对象之间互相转换
- java对象和json对象之间互相转换
- java对象和json对象之间互相转换例子
- java对象和json对象之间互相转换
- java对象和json对象之间互相转换
- ubuntu 16.04 安装 xgboost python运行环境
- django后台和app客户端的搭建指南(python,android)。模拟手机获取验证码的请求
- Chrome 常用快捷键
- EL,jstl,OGNL表达式
- github错误:Permission denied to deploy key......
- java对象和Map之间互相转换的三种实现方式
- 调度线程池ScheduledThreadPool使用示例
- 1101. Quick Sort (25)
- 设计模式(16)--迭代器模式
- hdu 3400 Line belt
- 前端常用网站
- 如何去Tocat官网下载tomcat
- eclipse xml editor从视图编辑改为源代码编辑
- 贝叶斯思维(实例1)——贝叶斯基础框架