精华内容
下载资源
问答
  • java两个对象属性比较
    千次阅读
    2021-02-26 21:39:11

    两个对象进行比较相等,有两种做法:

    1,情况一:当仅仅只是判断两个对象是否相等时,只需重写equals()方法即可。这里就不用说明

    2.情况二:当除了情况一之外,还需知道是那个属性不同,那么就需要采用类反射,具体代码如下:

    public static void main(String[] args) {

    A a = new A();

    a.setUserName("a");

    a.setPassword("p");

    a.setQq("q");

    a.setWechat("w");

    A b = new A();

    b.setUserName("a");

    b.setPassword("p");

    b.setQq("q");

    b.setWechat("ww");

    //只是比较两个对象是否相等,那么直接重写equals方法

    System.out.println( a.equals(b));

    try {

    Map maps = compare( a, b );

    System.out.println();

    } catch (Exception e) {

    e.printStackTrace();

    }

    }

    public static Map compare(T obj1, T Obj2)

    throws Exception {

    Map result = new HashMap();

    Field[] fs = obj1.getClass().getDeclaredFields();

    for (Field f : fs) {

    f.setAccessible(true);

    Object v1 = f.get(obj1);

    Object v2 = f.get(Obj2);

    if( ! equals(v1, v2) ){

    result.put(f.getName(), String.valueOf(equals(v1, v2)));

    }

    }

    return result;

    }

    public static boolean equals(Object obj1, Object obj2) {

    if (obj1 == obj2) {

    return true;

    }

    if (obj1 == null || obj2 == null) {

    return false;

    }

    return obj1.equals(obj2);

    }

    更多相关内容
  • 下面小编就为大家带来一篇基于java中两个对象属性的比较。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 工具类: ContrastObjUtil import java.beans.PropertyDescriptor; import java.lang.reflect.Field; import java.lang.reflect.Method; ... * 属性差异 工具类 */ public class ContrastOb...

    工具类:    ContrastObjUtil

     

    import java.beans.PropertyDescriptor;
    import java.lang.reflect.Field;
    import java.lang.reflect.Method;
    
    import com.alibaba.fastjson.JSONArray;
    import com.alibaba.fastjson.JSONObject;
    
    /**
     * 属性差异 工具类
     */
    public class ContrastObjUtil {
    
        public static String comparObj(Object oldBean, Object newBean) {
            JSONArray array = new JSONArray();
            try {
                Class clazz = oldBean.getClass();
                Field[] fields = oldBean.getClass().getDeclaredFields();
                int i = 1;
    
                for (Field field : fields) {
                    if ("serialVersionUID".equals(field.getName())) {
                        continue;
                    }
                    PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz);
                    Method getMethod = pd.getReadMethod();
                    Object o1 = getMethod.invoke(oldBean);
                    Object o2 = getMethod.invoke(newBean);
                    if (o1 == null || o2 == null) {
                        continue;
                    }
                    if (!o1.toString().equals(o2.toString())) {
                        // 要显示的字段名
                        String fieldName = "";
                        fieldName = field.getName();
    
                        JSONObject json = new JSONObject();
                        json.put("type", fieldName);
                        json.put("oldValue", o1);
                        json.put("newValue", o2);
                        array.add(json);
                        i++;
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
    
            return array.toJSONString();
        }
    }

     

     

     

    测试:

    public void testCompare(){
            User u1 = new User();
            u1.setId(1);
            u1.setName("小明");
            u1.setPhone("12580");
    
            User u2 = new User();
            u2.setId(1);
            u2.setName("小明");
            u2.setPhone("12580999");
    
            String result = ContrastObjUtil.comparObj(u1, u2);
            System.out.println(result);//[{"newValue":"12580999","oldValue":"12580","type":"phone"}]
        }

     

     

    结果:

    [{"newValue":"12580999","oldValue":"12580","type":"phone"}]

     

     

     

     

     

     

     

     

     

     

    展开全文
  • 1、对比两个对象属性差异/*** 获取两个对象之间的变化(仅对比当前对象写的属性,不会对比父类写的属性)* @param oldBean* @param newBean* @return*/public String getObjectDifferent(Object oldBean, Object new...

    1、对比两个对象的属性差异

    /**

    * 获取两个对象之间的变化(仅对比当前对象写的属性,不会对比父类写的属性)

    * @param oldBean

    * @param newBean

    * @return

    */

    public String getObjectDifferent(Object oldBean, Object newBean) {

    if (oldBean != null && newBean!= null) {

    String modifyValue = "";

    try {

    Class clazz = oldBean.getClass();

    List fields = new ArrayList<>();

    fields.addAll(new ArrayList<>(Arrays.asList(clazz.getDeclaredFields())));

    //如果父类属性变化也记录

    fields.addAll(new ArrayList<>(Arrays.asList(clazz.getSuperclass().getDeclaredFields())));

    for (Field field : fields) {

    if ("serialVersionUID".equals(field.getName())) {

    continue;

    }

    PropertyDescriptor pd = new PropertyDescriptor(field.getName(), oldBean.getClass());

    Method getMethod = pd.getReadMethod();

    Object o1 = getMethod.invoke(oldBean);

    Object o2 = getMethod.invoke(newBean);

    if (o1 == null || o2 == null) {

    continue;

    }

    if (!o1.toString().equals(o2.toString())) {

    modifyValue += field.getName() + ":" + o1 + "->" + o2 + "; ";

    }

    }

    return modifyValue;

    } catch (Exception e) {

    e.printStackTrace();

    return e.toString();

    }

    } else {

    log.info("传入对象为空,保存 “修改操作” 系统敏感操作记录失败");

    return "保存 “修改操作” 传入对象为空";

    }

    }

    2、获取对象不为空的属性

    /**

    * 获取对象不为空的属性

    * @param object

    * @return

    */

    public String getObjectNotNull(Object object) {

    String str = "";

    if (object != null) {

    try {

    Field[] fields = object.getClass().getDeclaredFields();

    for (Field field : fields) {

    if ("serialVersionUID".equals(field.getName())) {

    continue;

    }

    PropertyDescriptor pd = new PropertyDescriptor(field.getName(), object.getClass());

    Method getMethod = pd.getReadMethod();

    Object obj = getMethod.invoke(object);

    if (obj != null && (!StringUtil.isEmpty(obj.toString()))) {

    str += field.getName() + ":" + obj + ";";

    }

    }

    } catch (Exception ex) {

    return ex.toString();

    }

    }

    return str;

    }

    展开全文
  • java 对象属性比较工具类

    千次阅读 2017-09-14 14:50:10
    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 对象属性比较工具类
    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;
            }




        }


    }
    展开全文
  • java拷贝对象属性的几种方式对比

    千次阅读 2018-12-10 11:47:16
    常用的对象属性的拷贝方式有很多,就随便说几个: spring 的 BeanUtils.copyproperties() 原理:反射 apache的 BeanUtils.copyproperties() String的 BeanUtils.copyproperties() PropertyUtils....
  • java对象属性复制的几种方式

    千次阅读 2020-09-09 20:25:34
    java对象属性复制的几种方式 1.使用java反射机制,获取对象的属性和get、set方法进行复制; 2.使用spring-beans5.0.8包中的BeanUtils类 import org.springframework.beans.BeanUtils; SourceObject sourceObject = ...
  • Java对象比较,字段属性比较,使用Field来批量获取对象之间不同的值
  • 主要介绍了Java利用反射获取object的属性和值代码示例,具有一定借鉴价值,需要的朋友可以参考下。
  • Java比较两个对象属性值是否相等 import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.lang.reflect.Method; import java.sql.Timestamp; import java.util.*; /** * 比较两个...
  • private static Logger logger= LoggerFactory.getLogger(ObjectFieldUtil.class); /** ... * @return 修改的对象属性值名称集合 */ public static List<String> getChangeList(Object o.
  • 下面小编就为大家分享一篇java的JsonObject对象提取值方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 实际开发中,存在比较两个对象,需要校验某些字段...下面介绍利用反射机制,判断两个对象属性值是否相同 public static void main(String[] args) throws IllegalAccessException { Student student = new Stude.
  • Java:比较两个对象中全部属性值是否相等

    万次阅读 多人点赞 2018-12-14 16:01:49
    Java:比较两个对象中全部属性值是否相等 例如下述Java类: import java.io.Serializable; import java.util.List; public class Bean_Topology implements Serializable { private static final long ...
  • 使用反射机制获取两个对象属性名相同属性值不同的把属性名及两个对象属性
  • java对象拷贝效率对比----反射

    千次阅读 2018-08-16 17:11:09
    1.org.apache.commons.beanutils.BeanUtils属性拷贝的本质使用反射。...3.自己写的反射进行对象复制。 4.直接使用get、set方法复制。 5.cglib的BeanCopier。   次数 10 ...
  • Java中通常要比较两个对象在修改前与修改后的值是否相同,一般我们采用的是反射技术获取对象的get方法[或其他的方法]获取值并做比较。如果系统将修改的属性名称也显示出来,这样就能更直观的显示类中的哪一个属性...
  • 例以下述Java类:javaimport java.io.Serializable;import java.util.List;public class Bean_Topology implements Serializable {private static final long serialVersionUID = 1L;public static long ...
  • Java比较两个对象属性有哪些不同

    千次阅读 2020-05-15 21:08:58
    创建工具类通过反射获取类型字段并且通过getSuperclass获取父类的字段,然后再通过两个对象进行字段值比较。 public class ClassInstanceCompareUtil { /** * 比较对象所有字段并把差异字段存入新的对象 * * @...
  • Java对象数组按照某属性排序

    千次阅读 2020-10-15 15:58:19
    要排序就要有比较的方法, 因为是自定义的类, 系统不知道怎么做两个自定义类的比较,所以我们要自己在类内写两个类的比较的方法,也就是告诉按照那个属性或者那种方式来给对象数组排序,自定义比较算法也就是实现...
  • 基于Java反射机制以及自定义注解完成实体对象属性对比,并将发生变化的属性筛选出来
  • 需求:比较两个相同的对象,得到不同的属性值的属性属性值,后面才是重点:对像里面包含其他的对象,也要拿出来,例如:两个user对象,user里面包含部门,如果两个user下面的部门不一致,要得到分别的部门名称,...
  • java获取两个对象不同属性

    千次阅读 2020-03-05 17:03:29
    首先要完成如上的需求,我们要有一个大致的思路,新增、删除、修改三种操作日志,其中新增前端会上传对象信息,直接生成一条日志的记录,删除操作一般会上传id,根据id查询数据库,拿到你想要的字段。 难点在与修改...
  • import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; /** * @Auther: zs * @Date: 2019/9/24 17:13 * @Description: 字段名称注解 */ @Retention(Retention...
  • } } 转换对象之间属性的方法 /** * 判断某个类是否存在某个属性 * @param t * @param fieldName * @return */ public static Boolean hasField(Class t,String fieldName){ Field[] declaredFields = t....
  • java两个对象匹配相同属性不同的值

    千次阅读 2020-10-28 11:37:36
    两个对象匹配相同属性不同的值欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中...
  • * 对象比较器 * 比较结果eg:1、字段名称loginName,旧值:liu,新值:gu;2、字段名称address,旧值:hunan,新值:neimenggu * @param oldBean * @param newBean * @return */ public String compareObject(Object ...
  • java8 两个同类的实体对象合并属性

    千次阅读 2020-12-29 15:46:35
    看到同事写的代码二三十行,全部是这种...参考文章java 复制非空对象属性值 这里主要使用到的是hutoolBean工具-BeanUtil,复制属性方法 copyProperties 看一下源码 这里是可以对某些属性不进行赋值的,比如...
  • 做一个修改操作记录要记录做修改操作前Person p1属性属性值和修改后Person p2属性属性值。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 118,379
精华内容 47,351
关键字:

java对象属性对比

java 订阅