两个String类型集合的比对(或 两个表的比对)

equBaseInfoSubList为主要基准,    openStatusList比它多的要删除,少的要添加。

自己在项目中遇到的,两个表的比对。

主要思想:

                数学中的交集思想:A,B两个集合。先找出A,B的交集,A-交集=需要添加的部分;B-交集=需要删除的部分。目测是最为简单的方法。

               一开始想从正面去解决,发现要绕很多路,想去找他们的不同部分,结果可以想象,很难实现。脑子一转,可以找他们相同的部分,真是益处多多,少了很多步骤。

如下是两个表的查询list的比对方法,其中主表的guid是从表的外键(equSubId)。


public void importEquBaseInfoSub(List <EquBaseInfoSub> equBaseInfoSubList, List <EquOpenStatus> openStatusList, PageContext pc) throws Exception {


        /*openStatus表和equBaseInfoSub表相同的部分*/
        List <String> samelist = new ArrayList <String>();

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

        for (EquBaseInfoSub sub : equBaseInfoSubList) {
            subMap.put(sub.getGuid(), sub);
        }
        for (EquOpenStatus os : openStatusList) {
            osMap.put(os.getEquSubId(), os);
        }
        Set <String> subSet = subMap.keySet();
        Set <String> osSet = osMap.keySet();

        /*查找 两个集合相同的部分*/
        for (String o : osSet) {
            for (String s : subSet) {
                if (o.equals(s)) {
                    samelist.add(o);
                    continue;
                }
            }
        }

        int size = samelist.size();
        for (int i = 0; i < size; i++) {
            String sameEml = samelist.get(i);
            /*获取需要添加的数据 (subSet集合减去samelist)*/
            subSet.remove(sameEml);
            /*获取需要删除的数据(osSet集合减去samelist)*/
            osSet.remove(sameEml);
        }

        for (String o : osSet) {
            //del
            EquOpenStatus equOpenStatus = new EquOpenStatus();
            equOpenStatus = (EquOpenStatus) osMap.get(o);
            pc.putEntity(equOpenStatus);
            SpringConfigHelper.getDeleteHandler().execute(pc);
        }

        for (String s : subSet) {
            //add
            EquBaseInfoSub equBaseInfoSub = new EquBaseInfoSub();
            equBaseInfoSub = (EquBaseInfoSub) subMap.get(s);
            final EquOpenStatus equOpenStatus = new EquOpenStatus();
            equOpenStatus.setEquSubId(equBaseInfoSub.getGuid());
            equOpenStatus.setEquType(EquType.EQU);
            equOpenStatus.setOpenDate(sysDate);
            equOpenStatus.setOpenFlag("Y");
            pc.putEntity(equOpenStatus);
            SpringConfigHelper.getSaveHandler().execute(pc);
        }

    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值