循环两个集合筛选交集和补集

最近项目中在做人员的编辑过程中,由于人员和岗位是一对多关系,而权限绑定着岗位ID,不可以直接失效再做插入,需要对编辑后的岗位集合和数据库中原先的岗位集合根据组织编码需要去循环比对做判断。
假设A集合(编辑后的岗位集合),B集合(数据库中岗位集合)。

  • A没有,B有,删除
  • A有,B没有,新增
  • A和B都有,更新
 public int[] updatePtPostList(String staffCode, List<UcPost> ucPtPostList) {
       int[] result;
       List<UcPost> queryPostList = queryPost(staffCode, ptPost, 0);//获得岗位表里的兼职岗集合
       List<UcPost> addPostList = new ArrayList();//需要新增的兼职岗位List(传入List有,岗位表List没有)
       List<UcPost> updatePostList = new ArrayList();//需要更新的兼职岗List(传入List有,岗位表List也有)
       List<UcPost> deletePostList = new ArrayList();//需要删除的岗位List(传入List没有,岗位表List有)
       if (null == ucPtPostList || ucPtPostList.isEmpty()) {//如果传入的新ucPtPostList为空,删除数据库中存在的兼职岗
           if (null != queryPostList && !queryPostList.isEmpty()) {
               int oldSize = queryPostList.size();
               for (int i = 0; i < oldSize; i++) {
                   UcPost oldPost = queryPostList.get(i);
                   oldPost.setState(0);
                   deletePostList.add(oldPost);
               }
           }
       }
       else {
           if (null != queryPostList && !queryPostList.isEmpty()) {
               int oldSize = queryPostList.size();
               int newSize = queryPostList.size();
               boolean flag1 = true;
               for (int i = 0; i < newSize; i++) {//外层循环传入LIST
                   UcPost newPost = ucPtPostList.get(i);
                   String newOrgCode = newPost.getOrgCode();//查询岗位表兼职岗部门编码
                   for (int j = 0; j < oldSize; j++) {//内层循环岗位表LIST
                       UcPost oldPost = queryPostList.get(j);
                       String oldOrgCode = oldPost.getOrgCode();//查询修改的兼职岗部门编码
                       if (oldOrgCode.equals(newOrgCode)) {//部门ID相同更新
                           newPost.setPostId(oldPost.getPostId());//将岗位表ID赋给新LIST
                           newPost.setState(1);
                           updatePostList.add(newPost);
                           flag1 = false;
                           break;
                       }
                   }
                   if (flag1) {//true代表岗位表中没有该兼职信息,添加
                       newPost.setState(1);
                       addPostList.add(newPost);
                   }
               }
               boolean flag2 = true;
               for (int i = 0; i < oldSize; i++) {//外层为岗位表List
                   UcPost oldPost = queryPostList.get(i);
                   String oldOrgCode = oldPost.getOrgCode();//查询修改的兼职岗部门编码
                   for (int j = 0; j < newSize; j++) {//内层为传入获取的List
                       UcPost newPost = ucPtPostList.get(j);
                       String newOrgCode = newPost.getOrgCode();//查询岗位表兼职岗部门编码
                       if (newOrgCode.equals(oldOrgCode)) {
                           flag2 = false;
                           break;
                       }
                   }
                   if (flag2) {//true说明岗位表里有,传入List里没有,删除
                       oldPost.setState(0);
                       deletePostList.add(oldPost);
                   }
               }
               
           }
           else {//查询到数据库岗位表里没有,全部插入
               for (int i = 0; i < ucPtPostList.size(); i++) {
                   UcPost newPost = ucPtPostList.get(i);
                   newPost.setState(1);
                   addPostList.add(newPost);
               }
           }
       }
       result = sql.insertBatch(UcPost.class, addPostList);//批量插入
       result = sql.updateBatchTemplateById(UcPost.class, updatePostList);//批量更新
       result = sql.updateBatchTemplateById(UcPost.class, deletePostList);//批量删除
       return result;
   }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值