您的位置:首页 > 编程语言 > Java开发

java 对象属性比较工具类

2017-09-14 14:50 337 查看
package com.zxy.product.human.web.log;

import java.lang.reflect.Field;

import java.util.HashMap;

import java.util.Map;

import com.google.common.collect.Maps;

/**

 * BeanUtil 对象属性比较工具类

 * @author zzg

 * 

 **/

public class BeanUtil {

    public static void main(String[] args) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {

        // TODO Auto-generated method stub

        BeanUtil util = new BeanUtil();

        //excel 读取数据

        Person excel = util.new Person();

        excel.setId("1");

        excel.setAge("18");

        excel.setName("知学云1");

        //database 读取数据

        Person database = util.new Person();

        database.setId("1");

        database.setAge("16");

        database.setName("知学云");

       Map<String,Map<String,Object>> map = util.getMap(excel);

        //遍历map

//        for (Map.Entry<String,Object> entry : map.entrySet()) {

//            System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());

//        }

        boolean flag = util.getFieldEqual(database, map);

        System.out.println("属性值是否发生改变:"+ flag);

        Map<String,Map<String,Object>> fields = util.getFieldUpdate(database, map);

        Map<String,Object> c = fields.get(database.getId());

        for (Map.Entry<String,Object> entry : c.entrySet()) {

          System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());

      }

    }

    // 指定Bean对象 关联属性转换为Map

    public Map<String,Map<String,Object>> getMap(Person object) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException{

        Map<String,Map<String,Object>> obj = new HashMap<String,Map<String,Object>>();

        Map<String,Object> map = Maps.newHashMap();

        Class<?> cls = object.getClass();

        Field[] fields = cls.getDeclaredFields();

        for(Field field : fields){

            Object value = getFieldValue(object, field.getName());

            String key = field.getName();

            map.put(key, value);

        }

        obj.put(object.getId(), map);

        return obj;

    }

    // Bean 关联属性转换为Map

    public Map<String,Object> getMapProperties(Person object) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException{

        Map<String,Object> map = Maps.newHashMap();

        Class<?> cls = object.getClass();

        Field[] fields = cls.getDeclaredFields();

        for(Field field : fields){

            Object value = getFieldValue(object, field.getName());

            String key = field.getName();

            map.put(key, value);

        }

        return map;

    }

    // 获取指定Field 属性值

    public Object getFieldValue(Object obj, String fieldName) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException{

        Class<?> cls = obj.getClass();

        Object value = null;

        Field field = cls.getDeclaredField(fieldName);;

        field.setAccessible(true);

        value = field.get(obj);

        return value;

    }

    //判断指定对象的属性值是否相等

    public boolean getFieldEqual(Person object, Map<String,Map<String, Object>> map) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException{

        boolean flag = false;

        Class<?> cls = object.getClass();

        Field[] fields = cls.getDeclaredFields();

        if(map.containsKey(object.getId())){

            Map<String, Object> content = map.get(object.getId());

            for(Field field : fields){

                Object excel = content.get(field.getName());

                Object database = getFieldValue(object,field.getName());

                if(excel == null && database == null){

                    flag = false;

                }else if(excel != null && database == null){

                    flag = true;

                    break;

                }else if(excel == null && database != null){

                    flag = true;

                    break;

                }else if(excel != null && database != null){

                    if(excel.equals(database)){

                        flag = false;

                    }else{

                        flag = true;

                        break;

                    }

                }

            }

        }

        return flag;

    }

    // 返回匹配对象修改的属性值

    public  Map<String,Map<String,Object>> getFieldUpdate(Person object, Map<String,Map<String, Object>> map) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException{

        Map<String,Map<String,Object>> result =new HashMap<String,Map<String,Object>>();

        Class<?> cls = object.getClass();

        Field[] fields = cls.getDeclaredFields();

        Map<String, Object> content = map.get(object.getId());

        if(map.containsKey(object.getId())){

            Map<String,Object> f = new HashMap<String,Object>();

            for(Field field : fields){

                Object excel = content.get(field.getName());

                Object database = getFieldValue(object,field.getName());

                //属性值判断:四种情况

                if(excel != null && database!= null){

                    if(!excel.equals(database)){

                        f.put(field.getName(), excel);

                     }

                }else if(excel == null && database == null){

                }else if(excel != null && database == null){

                        f.put(field.getName(), excel);

                }else if(excel == null && database != null){

                        f.put(field.getName(), null);

                }

            }

            result.put(object.getId(), f);

        }

        return result;

    }

    public class Person{

        private String id;

        private String name;

        private String age;

        private String sex;

        public String getId() {

            return id;

        }

        public void setId(String id) {

            this.id = id;

        }

        public String getName() {

            return name;

        }

        public void setName(String name) {

            this.name = name;

        }

        public String getAge() {

            return age;

        }

        public void setAge(String age) {

            this.age = age;

        }

        public String getSex() {

            return sex;

        }

        public void setSex(String sex) {

            this.sex = sex;

        }

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐