java 传入数组和数据库对比数据库没有则删除,数据库有则修改,数组多则添加

java 传入数组和数据库对比数据库没有则删除,数据库有则修改,数组多则添加

    public Result<?> speechRuleBatch(SpeechRuleDto speechRule) {
        List<SpeechRule> addList = new ArrayList<>();
        List<SpeechRule> editList = new ArrayList<>();
        List<SpeechRule> delList = new ArrayList<>();
        String speechModelId = speechRule.getSpeechModelId();
        // 根据测评方案id 查询测评方案下数据
        QueryWrapper<SpeechRule> wrapper = new QueryWrapper<>();
        wrapper.lambda().eq(SpeechRule::getEvaluationPlanId, speechModelId);
        List<SpeechRule> compareList = this.list(wrapper);

        //1.1  如果list的size=0 或 =null 情况下 如果compareList 的size>0  则 compareList里的所有数据为delList
        List<SpeechRule> speechRuleList = speechRule.getList();
        if (null == speechRuleList || speechRuleList.size() < 1) {
            if (compareList.size() > 0) {
                delList = compareList;
            }
        } else {
            // 1.2 取出传参过来的list 没有id的为addlist
            List<SpeechRule> collect = speechRuleList.stream().filter(r -> StringUtils.isBlank(r.getEvaluationPlanId())).collect(Collectors.toList());
            if (collect.size() > 0) {
                addList = collect;
            }
        }
        //2.取出有id的list,与compareList比较,有则为修改 无则为删除
        List<SpeechRule> idCollect = speechRuleList.stream().filter(r -> StringUtils.isNotBlank(r.getEvaluationPlanId())).collect(Collectors.toList());

        // 取比较id
        List<Long> oldList = compareList.stream().map(SpeechRule::getId).collect(Collectors.toList());
        // 取传值id
        List<Long> newList = idCollect.stream().map(SpeechRule::getId).collect(Collectors.toList());


        //取交集id
        List<Long> editIds = newList.stream().filter(oldList::contains).collect(Collectors.toList());
        if (editIds.size() > 0) {
            //取对应交集的对象
            System.out.println("------------------交集的对象---------------------");
            List<SpeechRule> editUpdate = idCollect.stream().filter(it -> editIds.contains(it.getId())).collect(Collectors.toList());
            if (editUpdate.size() > 0) {
                editList = editUpdate;
                editList.forEach(System.out::println);
            }
        }
        //取差集id
        List<Long> delIds = oldList.stream().filter(it -> !newList.contains(it)).collect(Collectors.toList());
        if (delIds.size() > 0) {
            //取对应差集的对象
            System.out.println("------------------差集的对象---------------------");
            List<SpeechRule> delUpdate = compareList.stream().filter(it -> delIds.contains(it.getId())).collect(Collectors.toList());
            if (delUpdate.size() > 0) {
                delList = delUpdate;
                delList.forEach(System.out::println);
            }
        }
        //  执行添加
        if (addList.size() > 0) {
            for (SpeechRule r : addList) {
                r.setEvaluationPlanId(speechModelId);
                this.save(r);
            }
        }
        // 执行删除
        if (delList.size() > 0) {
            List<Long> ids = delList.stream().map(SpeechRule::getId).collect(Collectors.toList());
            this.removeByIds(ids);
        }
//        执行修改
        if (editList.size() > 0) {
            for (SpeechRule speech : editList) {
                this.updateById(speech);
            }
        }
        return Result.ok("修改成功!");
    }
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值