将已有的集合和数据库中集合进行对比同步更新(两个集合对比,获取集合中不同的数据方法)

/**
     * 两个集合对比,获取集合中不相同的数据
     * @param listA 已有数据信息集合
     * @param listB 数据库中信息集合
     * @return
     */
    public List<AreaCameraInformation> getDifferListByMap(List<AreaCameraInformation> listA, List<AreaCameraInformation> listB){

        List<AreaCameraInformation> listC = new ArrayList<>(listA);
        List<AreaCameraInformation> listD = new ArrayList<>(listA);
        List<AreaCameraInformation> listE = new ArrayList<>(listB);
        //找到已有集合和数据库集合中都存在的数据,以防重复存储
        for(int i = 0;i<listA.size();i++){
            for (AreaCameraInformation information : listB) {
                if(listA.get(i).equals(information)){
                    System.out.println(i);
                    listD.remove(listA.get(i));//返回查询到的不同的数据listD,把相同的都去除
                    break;
                }
            }
        }
        //找出数据库中有但是已有数据已经删除的集合,并在下面删除
        for(int i = 0;i<listB.size();i++){
            for (int j = 0;j< listC.size(); j++){
                if(listB.get(i).equals(listC.get(j))){
                    listE.remove(listB.get(i));
                    break;
                }
            }
        }
        //listE为数据库中有的数据已有集合没有的数据,和数据库中跟另一集合不同的数据
        for (AreaCameraInformation information : listE) {
            //把这一条数据删除
            areaCameraInformationMapper.deleteByCameraId(information.getCameraId());
        }
        //listD为已有的集合中有但是数据库中集合没有或者不一样的数据
        return listD;
    }

这种对比需要重写equals

    //需要对比两个集合中的数据是否完全一样,重写equals将所有字段全部的值全部做对比
    @Override
    public boolean equals(Object obj){
        if(obj==null){
            return false;
        }
        if(obj instanceof AreaCameraInformation){
            AreaCameraInformation information = (AreaCameraInformation) obj;
            if(information.cameraId.equals(this.cameraId) && information.cameraType.equals(this.cameraType) &&
            information.decodetag.equals(this.decodetag) &&
            information.extraField.equals(this.extraField) &&
            information.indexCode.equals(this.indexCode) && information.isOnline.equals(this.isOnline) &&
            information.latitude.equals(this.latitude) && information.longitude.equals(this.longitude) &&
            information.name.equals(this.name) && information.parentIndexCode.equals(this.parentIndexCode)&&
            information.pixel.equals(this.pixel) && information.updateTime.equals(this.updateTime)){
                //description字段没有数据,对比时会出现空指针所以再单独判断
                if(information.description !=null && this.description != null){
                    if(information.description.equals(this.description)){
                        return true;
                    }else{
                        return false;
                    }
                }else if((information.description ==null || information.description.equals("")) && (this.description == null || this.description .equals(""))){
                    return true;
                }else{
                    return false;
                }
            }else{
                return false;
            }
        }
        return false;
    }

最后再将数据库中和已有集合相同主键的值删除掉以防重复

 /**
     * 将数据库中和数据差相同的那一条直接删除,再将数据差集合存入数据库
     * @param difference 数据差集合
     * @param sql 数据库查出来的集合
     */
    public void DeleteAndRenew(List<AreaCameraInformation> difference,List<AreaCameraInformation> sql){
        for (AreaCameraInformation information : difference) {
            for (AreaCameraInformation sq : sql) {
                if(information.getCameraId().equals(sq.getCameraId())){
                    //删除该数据
                    areaCameraInformationMapper.deleteByCameraId(sq.getCameraId());
                    break;
                }
            }
        }
        if (!difference.isEmpty()){
            //存数据
            for (AreaCameraInformation information : difference) {
                areaCameraInformationMapper.saveData(information);
            }
        }
    }

最后完成数据库同步更新

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值