范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

比较两个JavaBean属性是否相同

  最近有个需求,需要记录数据修改前后的变化值。所以就想,通过反射的方式前后两个JavaBean对比一下属性来实现。其中主要功能包括:对比出修改的数据,并知道其修改前后的值;可以对一些字段进行屏蔽,不做比较字段属性要能知到其业务含义,在页面展示。
  基于以上的要求首先创建一个工具类:public class ObjCompareUtil {     /**      * 比较两个实体属性值,返回一个map以有差异的属性名为key,value为一个Map分别存oldObject,newObject此属性名的值      *      * @param oldObject      进行属性比较的对象1      * @param newObject      进行属性比较的对象2      * @param ignoreArr 忽略比较的字段      * @return 属性差异比较结果map      */     public static Map> compareFields(Object oldObject, Object newObject, boolean userAnno, String[] ignoreArr) {         try {             Map> map = new HashMap<>();             List ignoreList = null;             if (ignoreArr != null && ignoreArr.length > 0) {                 // array转化为list                 ignoreList = Arrays.asList(ignoreArr);             }             if (oldObject.getClass() != newObject.getClass()) {                 return map;             }             Class clazz = oldObject.getClass();             // 获取object的属性描述             PropertyDescriptor[] pds = Introspector.getBeanInfo(clazz, Object.class).getPropertyDescriptors();             // 这里就是所有的属性了             for (PropertyDescriptor pd : pds) {                 // 属性名                 String name = pd.getName();                 if (ignoreList != null && ignoreList.contains(name)) {// 如果当前属性选择忽略比较,跳到下一次循环                     continue;                 }                 // get方法                 Method readMethod = pd.getReadMethod();                 // 获取值                 Object oldValue = readMethod.invoke(oldObject);                 Object newValue = readMethod.invoke(newObject);                 //获取注解备注                 if (userAnno) {                     //根据字段名来获取字段                     Field f = clazz.getDeclaredField(name);                     FieldInfo annotation = f.getAnnotation(FieldInfo.class);                     if (annotation != null) {                         name = annotation.desc();                     }                 }                 //放置结果                 if (oldValue == null || !oldValue.equals(newValue)) {                     List list = new ArrayList<>(2);                     list.add(oldValue);                     list.add(newValue);                     map.put(name, list);                 }             }             return map;         } catch (Exception e) {             return null;         }     } }
  其次,开发一个自定义注解,用来标注属性的含义:@Target({ElementType.FIELD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface FieldInfo {       String desc() default ""; }
  接下来做一个测试,首先定义一个实体类:@Data @AllArgsConstructor @NoArgsConstructor public class User {     private String name;      @FieldInfo(desc = "年龄")     private Integer age;      private Byte status;      private Date birthday; }
  跑一个main方法做一下测试:public static void main(String[] args) throws InterruptedException {         User user1 = new User("liwei", 18, (byte) 1, new Date());         Thread.sleep(100);         User user2 = new User("liwei", 19, (byte) 1, new Date());         String[] ignor = {"age"};         Map> stringListMap = ObjCompareUtil.compareFields(user1, user2, true, null);         System.out.println(stringListMap);     }
  输出结果:{birthday=[Wed Jan 26 22:42:26 CST 2022, Wed Jan 26 22:42:26 CST 2022], 年龄=[18, 19]}
  结果符合预期!
618扫地机器人推荐扫拖一体,轻松转沙发床底的科沃斯T5Max清扫,对于每一个家庭来说是一件日常必不可少的事情。但随着生活压力大,工作越来越忙碌,我们很难顾全家庭清扫这块。扫地机器人的出现,很大程度帮我们解决了这个难题,当然了,作为年轻人,选有颜任性!VV5倾橙版即将上市,打造属于年轻人的ampampquot奢侈品ampampquot!说起橙色,可能有人会想到元气热情明媚等特质。但你知道吗,橙色更是精致奢侈的代名词。比如钟爱橙色的国际奢侈品牌爱马仕,它不仅让每一件橙系单品拥有永不褪去的时尚烙印,更将橙色的高贵与经良心皮卡哪家强?8。68万起直达国六B的风骏7汽油国六是一辆随着国六排放标准实施的临近,车市可谓是掀起了一波惊涛飓浪,国五还能买吗?国三国四的车要不要低价入?等问题在各大网站刷屏,然而对于志存高远的人来讲,想必已经准备要入手国六车型了。解禁LGgram17英寸大屏轻薄笔记本图赏关注LGgram系列笔记本很久了,终于还是没忍住,不久前入手了这款2019新款17英寸gram,型号为LGgram17Z990。其超大屏幕窄边框设计1610屏幕比带来了更加宽广的视发福利了!魅族16全系最高直降30012月20日0点,魅族16系列最高降300元,魅族16th售价2498元起,魅族16thPlus售价2998元起轻奢拍照旗舰魅族16X更优惠,仅售1798元起。魅族官网魅族天猫官方想在假期出门ampampquot浪ampampquot?哈弗F5给你安全和舒心!再过几天,万众期待的端午小假期就到啦,大家有没有提前规划好怎么度过呢?相信不少小伙伴已提前查好攻略,准备出去吃吃吃拍拍拍啦!BUT问题来了,旅游景区不止有诗和远方,还有看不到边界的考察了几十款电脑,发现这款笔记本更懂职场笔记本电脑作为职场的必备工具,已然成为职场人士最为亲密的战斗伙伴。这款战斗伙伴的性能效率怎样,也切身关系着我们的工作进程如何。作为一个职场人,面对市场杂七杂八的电脑型号,我们该如何MediaTek携手英特尔将5G带入下一代PC市场,已完成独立组网通话2020年8月6日,MediaTek5G布局从手机跨越到电脑及其他领域,与英特尔携手合作的5G个人电脑方案近期取得重要进展,日前通过5G调制解调器数据卡的开发与认证,成功将5G体验华为智慧办公新品发布会信息被剧透,笔记本多屏协同将再次升级?9月8日,华为官方宣布,将于9月13日举行智慧办公新品发布会。随后,新浪科技爆料,本次发布会推出的新品中将有一款14寸的大屏手机。当然,手机可能是故意放出的烟雾弹,根据外围爆料的信aigo移动固态硬盘S7Pro评测凭实力圈粉无数真国民好物你还记得U盘吗?小巧的机身设计,即便只有64GB的储存容量,但对于使用过的人来说,U盘依旧是移动储存设备最佳之选,不占任何空间的体积,也成为了当时众多用户和职场朋友们的首选。但随着5G速度比4G快10倍!视频流将发生什么变化?如今,我们从世界各地听到有关5G(第五代蜂窝技术)的信息,我们大多数人认为5G技术将改变一切。但是我们很少有人知道实际上会发生什么变化。真的,5G技术将发生什么变化?在此文章中,我
奥迪第4000万台发动机是电动机,国产厂商宣告成功完成了弯道超车近日,奥迪匈牙利工厂第4000万台发动机正式下线,这是一台最大功率140千瓦的电动机,将被装配的奥迪etron上。奥迪匈牙利工厂从生产发动机的历史可以追溯到1994年,2018年后全新第二代GS8强势驾临,重新定义科技豪华新标准IN天府,祺巴适。8月29日,广汽传祺以全新第二代GS8领衔,携旗下传祺M8四座荣耀版影豹传祺GS4PLUS等多款重磅车型登陆第二十四届成都国际汽车展览会,以新技术赋能新产品,以新贾跃亭尴尬了,定价280万元的FF91虽然一车难求,股价却惨遭腰斩被调侃为下周回国的贾跃亭,成功推动法拉第未来在美国纳斯达克成功上市,FF91量产也提上日程。贾老板的FF91电动车看起来颇受市场欢迎。全球限量300辆,订金5万美元的FF91未来主马斯克确认16万的特斯拉车型存在,但也表示随时会取消目前特斯拉在售车型共有ModelS3XY四款,但对于汽车市场来说,这样的车型阵容还无法覆盖需求,主流汽车价格区间也没有对应车型推出。去年就曾有传言流出,特斯拉正在规划一款15万元价苹果将为CarPlay加入更多功能,分析师特斯拉股价或因此跌掉81近日,有知情人士透露,苹果正在计划为CarPlay增加更多功能,使其接入汽车的空调座椅广播仪表盘等仪器,实现更全面的控制功能。苹果为这一项目起的代号为钢铁之心。分析人士认为,如果该做空机构称FF上市只是为了拿美国钱还中国债,贾跃亭无稽之谈今年7月,贾跃亭创立的电动汽车品牌法拉第未来(FF)在美国纳斯达克借壳上市。当时,FF高层表示汽车产品将对标迈巴赫宾利劳斯莱斯等豪车品牌,预计2022年开始交付。贾跃亭在回应是否有汉EV的高电压充电技术有什么特别之处?比亚迪销量连创新高,8月达成60508辆,其中旗舰车型汉8月销量9035辆,累计销量已突破11万大关,领跑中国品牌冲击豪华轿车市场,在长期被外国品牌占据的豪华区里成功突围,汉的亮眼大众ID。销售不振,8月国内仅交付7000辆,或收购江淮工厂寻求突破中国如今已经成为了全球最主要的新能源汽车市场之一。在这波红利的带动下,特斯拉小鹏蔚来理想比亚迪等车企都实现了销量上的突破。截至今年八月,蔚来理想和小鹏汽车等造车新势力的销量总计达到中国研制出5分钟充满的锂电池,技术全球领先,目前已开始试用新能源汽车的充电和续航问题一直是车主的一大心病,很多车主可能都有过在充电桩旁无所事事的经历,尤其是冬夏两季,在室外等充电的这段时间往往会变得异常难熬。因此,汽车电池的快充技术也就成1000公里续航和超级快充成为现实,广汽埃安预计明年实现产能翻番如果问今年风头最盛的国产新能源汽车品牌是谁,公开了多项黑科技的广汽埃安绝对值得一个提名。广汽埃安公开的8月销量新车数据显示,埃安家族8月份销量达到了11631辆,同比增长了115。戴姆勒CEO康林松半导体缺货将持续至明年,但国内销量有望上升从8月中旬以来,全球最大的汽车芯片生产地马来西亚发生了大规模的疫情,这也导致原就吃紧的芯片供应状况雪上加霜。9月6日,戴姆勒CEO康林松就表示,虽然芯片荒有望在今年第四季度开始缓解