首页 > 其他分享 >对比两个实体类不同

对比两个实体类不同

时间:2024-11-08 11:20:43浏览次数:1  
标签:map 实体类 get 不同 Collection sourceMap Map 对比 targetMap

//比较两个实体,返回两个Map结果
    public static void compare(String tableId, Object source, Object target, Map sourceMap, Map targetMap) {
        sourceMap.putAll((Map) BeanMapPlus(BeanUtil.beanToMap(source)));
        targetMap.putAll((Map) BeanMapPlus(BeanUtil.beanToMap(target)));
        delIntersection(tableId, sourceMap, targetMap);
    }

    ;
    //beantoMap加强,完全Map化 
    private static Object BeanMapPlus(Object map) {
        if (map instanceof Map) {
            HashSet<Object> set = new HashSet<>();
            set.addAll(((Map) map).keySet());
            for (Object o : set) {
                if (ObjectUtils.isEmpty(((Map) map).get(o))) {((Map<?, ?>) map).remove(o);continue; }
                if (BeanUtil.isBean(((Map) map).get(o).getClass()) && !(((Map) map).get(o) instanceof Date)) {
                    ((Map) map).put(o, BeanMapPlus(BeanUtil.beanToMap(((Map) map).get(o))));
                }
                if (((Map) map).get(o) instanceof Collection) BeanMapPlus(((Collection<?>) ((Map) map).get(o)));
            }
        }
        else if (map instanceof Collection && !ObjectUtils.isEmpty(map)) {
            List list = new ArrayList<>();
            for (Object o : ((Collection<?>) map)) {
                list.add(BeanMapPlus(BeanUtil.beanToMap(o)));
            }
            ((Collection<?>) map).clear();
            ((Collection<?>) map).addAll(list);
        }
        return map;
    }
   //删除两个Map的键值对交集
    private static void delIntersection(String tableId, Map sourceMap, Map targetMap) {
        HashSet<Object> set = new HashSet<>();
        set.addAll(sourceMap.keySet());
        for (Object o : set) {
            if (!targetMap.containsKey(o)) continue;
            if (targetMap.get(o) instanceof Map && sourceMap.get(o) instanceof Map)
                delIntersection(tableId, (Map) sourceMap.get(o), (Map) targetMap.get(o));
            if (targetMap.get(o) instanceof Collection && sourceMap.get(o) instanceof Collection) {
                if (((Collection<?>) targetMap.get(o)).containsAll(((Collection<?>) sourceMap.get(o)))) {
                    targetMap.remove(o);
                    sourceMap.remove(o);
                    continue;
                }
                //按数组顺序比较
                ArrayList<Object> soruce = new ArrayList<>();
                soruce.addAll(((Collection<?>) sourceMap.get(o)));
                ArrayList<Object> target = new ArrayList<>();
                target.addAll(((Collection<?>) targetMap.get(o)));
                for (int i = 0; i < Math.min(soruce.size(),target.size()); i++) {
                    if(soruce.get(i) instanceof Map && target.get(i) instanceof Map) delIntersection(tableId,(Map) soruce.get(i),(Map)target.get(i));
                }
//                //按 tableId 比较
//                List list = new ArrayList();
//                for (Object o1 : ((Collection<?>) targetMap.get(o))) {
//                    for (Object o2 : ((Collection<?>) sourceMap.get(o))) {
//                        if (o1 == o2) list.add(o1);
//                        else if (o1 instanceof Map
//                                && o2 instanceof Map
//                                && ((Map) o1).containsKey(tableId)
//                                && ((Map) o2).containsKey(tableId)
//                                && ((Map) o1).get(tableId) == ((Map) o2).get(tableId)
//                        ) delIntersection(tableId, ((Map) o1), ((Map) o2));
//                    }
//                }
//                if (!ObjectUtils.isEmpty(list)) {
//                    ((Collection<?>) targetMap.get(o)).removeAll(list);
//                    ((Collection<?>) sourceMap.get(o)).removeAll(list);
//                }
            }
            if (targetMap.get(o).getClass() != sourceMap.get(o).getClass()) continue;
            if (targetMap.get(o).toString().equals(sourceMap.get(o).toString())) {
                targetMap.remove(o);
                sourceMap.remove(o);
                continue;
            }
        }
    }

注:

BeanMapPlus这个方法目前只排除了Date类型,如果由其他需要排除的属性类型,可以再调整;

标签:map,实体类,get,不同,Collection,sourceMap,Map,对比,targetMap
From: https://www.cnblogs.com/tangzeqi/p/18534743

相关文章

  • localeStorage 当前标签页变化监听不到,只能监听不同标签页变化,自己写方法监听
     1.在utils中新建一个文件watchLocalStorage.tsexportdefaultfunctiondispatchEventStroage(){ constsignSetItem=localStorage.setItem localStorage.setItem=function(key,val){ letsetEvent=newEvent('setItemEvent') setEvent.key=key set......
  • 【DL】CAM | 与嵌入的概念相比,图像中有什么相似或不同之处?| 热力图可视化 | python |
    本文将采用像素属性方法嵌入模型输出(Adaptingpixelattributionmethodsforembeddingoutputsfrommodels)的实践。话不多说,先看看效果吧!!!目录1安装pytorch-gradcam2实践① 代码② 效果图“与嵌入的概念相比,图像中有什么相似或不同之处?”为了实现这一点,将创建......
  • 内核调度抢占模式——voluntary和full对比
    一、背景在之前的内核调度子系统专栏里,我们已经把调度有关的如CFS调度/RT调度,调度时间片,调度时延,cfs唤醒抢占特性,这些基本概念和细节都讲了一遍。其实这些细节更多的是帮助我们理解调度系统是如何运作的,调度系统里的大部分参数其实我们都是不会去调整,或者说不敢去做大的调整的......
  • 【笔记】谈谈阿里云和华为云在云原生微服务领域产品的不同之处
    背景        24年初学习了阿里云云原生微服务的课程和认证,年尾学习了华为云类似课程,想借此温故一下所学知识,结合课程内容总结谈谈对这两朵云的云原生微服务产品不同。        学习是一种愉悦,一种收获,让我们在探索中感受快乐。欢迎关注、点赞和收藏~一、谈......
  • PHP与Apache、Nginx的性能对比与优化技巧
    PHP与Apache、Nginx的性能对比与优化技巧在现代web开发中,PHP作为一种常见的服务器端脚本语言,通常需要与Web服务器(如Apache和Nginx)配合使用。Apache与Nginx各自的架构特点和性能表现有很大的不同,因此在PHP应用的部署过程中,选择合适的Web服务器并对其进行优化至关重要。Apache与N......
  • 实用GIS工具箱对比:GISBox等倾斜摄影切片软件的优缺点解析
    在地理信息系统(GIS)领域,强大的工具可以帮助用户更高效地进行数据处理、分析和可视化。本文介绍了五款实用的GIS工具箱——GISBox、QGIS、ArcGISOnline、GlobalMapper、MapTiler。它们各自在数据编辑、格式转换、地图发布和切片等方面具有独特的功能,能够满足从地理数据管理到复杂......
  • Zabbix 和 Prometheus 选型对比
    开源的监控产品有很多,其中最知名的,当属早期的Zabbix和现在的Prometheus。Zabbix是2001年发布的,至今已经20多年,很多细节打磨的相当到位,Prometheus是2014年发布的,相对年轻,依托于之前GoogleBorgmon的先进经验和灵感,Prometheus在云原生监控领域有着非常好的表现。咦?......
  • IPguard与Ping32数据加密对比:哪款更适合您的企业安全需求?
    在当今数字化时代,数据安全已经成为企业运营的重中之重。无论是个人信息、财务数据,还是商业机密,都面临着巨大的泄露风险。数据加密作为保护敏感数据的有效手段,已被广泛应用于各类企业中。IPguard和Ping32是两款备受瞩目的数据加密工具,它们各自有着独特的优势。那么,哪一款更适合......
  • 逻辑回归处理非线性关系与支持向量机的性能对比
            逻辑回归是一种常用的线性分类方法,通常用于处理线性关系的二分类任务。但是,对于非线性问题,传统的逻辑回归模型可能表现不佳,因为它假设数据可以被一个线性决策边界分割开来。为了使逻辑回归能够处理非线性关系,我们可以采取一些方法,比如特征变换和多项式扩展,从而......
  • 哈尔滨华时信息技术有限公司,别样对比看怎么样?
    在当今信息技术飞速发展的时代,哈尔滨华时信息技术有限公司(以下简称“华时信息”)以其独特的技术实力、服务理念和合作模式,在众多信息技术公司中脱颖而出,成为备受瞩目的焦点。以下将通过与其他信息技术公司的对比,来展现华时信息的别样风采。一、技术实力对比华时信息注重技......