现在呢我有2个对象user这2个对象里面的属性一模一样就是查询数据库的时候对应的属性值不一样
user对象 里面有属性userid,username,userpassword,usersex ,userage
我想要的一个方法是怎么样比较这2个user对象并且找出里面不一样的属性和值
我不想一个一个属性的比较而且如果这么做了我后面还有很多的对象要比较感觉太麻烦了。求大神们指点。。

解决方案 »

  1.   

    不是哼清楚你要的效果是什么,如果都是USER的,你在类里面写个静态方法,
    boolean isEuqal(USER user)
    {
        //在这里一个个比较属性,如果有不一样就返回false,一样就放回true}
    //想要比较两个对象是否一样就这样
    user1.isEuqal(user2);就行了,不知道是不是这样的效果
      

  2.   

    我觉得吧 要是这样的话呢 用反射写个通用方法呗 条用method中getXXX 获得值 然后比较值 不过比较值比较麻烦啊 不知道值类型的情况下 用Object比较值不知道会不会出问题
      

  3.   

    你这样写的话只能对user类有用 要是还有其他类比较 你还要在其他类里面再写一次
      

  4.   


    public class BeanUtil{
    //这里用泛型T保证传进来的o1 o2必须是同一个类型的对象
       public static <T> void compare(T o1,T o2) throws Exception{
          PropertyDescriptor pds=Introspector.getBeanInfo(o1.getClass,Object.class).getPropertyDescriptors();//获取对象的所有属性描述
          for(PropertyDescriptor pd:pds){
            String name=pd.getName();//获取属性名
            Method readMethod=pd.getReadMethod();//获取此属性的读方法即get方法
            Object value1=readMethod.invoke(o1);//调用get方法得到此属性在o1中的值
             Object value2=readMethod.invoke(o1);//调用get方法得到此属性在o2中的值
    /*
    *两个属性值不一样的就打印出来,这里只是简单的比较
    *如果这两个value1和value2不是常规的类型而是数组或者集合或者又是其它的对象
    *是集合或数组的自己进行展开一一取出对象进行递归调用,对象的直接递归调用
    */
             if(value1.equals(value2)){         
               System.out.println("属性:'"+name+"'不同一个为:"+value1+",另一个为:"+value2);
            }
          }
       }
    }
      

  5.   

    Object value2=readMethod.invoke(o2);
      

  6.   


    这里的if(value1.equals(value2)){  方法需要判断你数据库中具体使用哪种数据类型,也就是实体使用的数据类型,如果为:instanceof BigDecimal,用compareTo方法
    还有null值得处理等
      

  7.   

    一楼说的思路比较可行,在user的类中写一个方法,参数就是user类型的
      

  8.   


    我想要的一个方法是怎么样比较这2个user对象并且[color=#0000FF]找出里面不一样的属性和值[/color]
    找出不同的属性,不是判断对象是否相同。
      

  9.   

    只要返回一个不一样的属性,还是所有不一样的属性都要呢?
    如果都要,就搞个List存放吧,一个个比较,不一样就丢List里,最后返回。
      

  10.   

    我觉得这个方法可行。没有试。星期一去公司试下。。
    不过我找到了一个方法就是apache有一个方法就是把对象转换成map集合然后便利map就可以了得到2个map然后通过map的key得到value进行比较把不一样的值存入list对象返回回去。就可以得到不一样的值和属性了
    对于其他的类型比较必须要开始判断这个就不解释了。