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;}}


原创粉丝点击