根据某属性判断集合的交集,差集,并集

该博客介绍了如何通过Java处理前端传入的银行列表与数据库原有列表的交集、差集,以判断出增、删、改的状态。主要使用了集合操作和流API,通过对empBankacctId的比较确定列表元素的状态,并设置了对应的数据变更类型。
摘要由CSDN通过智能技术生成

纳尼,传列表还要传删除掉列表数据???

根据某属性判断集合的交集,差集,并集


需求描述–前端传一个银行列表,需要和原来的银行列表对比,判断出最终的列表增删改的状态,这里简单用一幅图描述一下:前端传的银行列表是newBankList ,数据库里的银行列表是oldBanList ,银行对象是PublicEmpBankParamDTO,唯一主键是empBankacctId
在这里插入图片描述

搞清楚需求下面直接上代码:

		List<PublicEmpBankParamDTO> oldBanList = resDTO.getPublicEmpBankDTOS();
        List<PublicEmpBankParamDTO> newBankList = modifyInsuEmpInfoReqDto.getPublicEmpBankParamDTOList();
        //先判断改的部分
        //交集
        List<PublicEmpBankParamDTO> updateBankList = new ArrayList<>();
        //差集1
        List<PublicEmpBankParamDTO> insertBankList = new ArrayList<>();
        //差集2
        List<PublicEmpBankParamDTO> deleteBankList = new ArrayList<>();
        if (!CollectionUtils.isEmpty(newBankList) && !CollectionUtils.isEmpty(oldBanList)) {
            //根据empBankacctId 判断赋予银行的操作状态
            List<String> empbackIds = oldBanList.stream().map(PublicEmpBankParamDTO::getEmpBankacctId).collect(Collectors.toList());
            updateBankList = newBankList.stream().filter(m -> empbackIds.contains(m.getEmpBankacctId())).collect(Collectors.toList());
        }
        List<String> updatebackIds = new ArrayList<>();
        if (!CollectionUtils.isEmpty(updateBankList)) {
            updatebackIds = updateBankList.stream().map(PublicEmpBankParamDTO::getEmpBankacctId).collect(Collectors.toList());
            updateBankList.stream().forEach(m -> {
                m.setDataChgType("3");//修改
            });
        }
        //再判断增的
        if (!CollectionUtils.isEmpty(newBankList)) {
            if (!CollectionUtils.isEmpty(updatebackIds)) {
                List<String> finalUpdatebackIds = updatebackIds;
                insertBankList = newBankList.stream().filter(m -> !finalUpdatebackIds.contains(m.getEmpBankacctId())).collect(Collectors.toList());
            } else {
                insertBankList = newBankList;
            }
        }
        //最后判断删除的
        if (!CollectionUtils.isEmpty(oldBanList)) {
            if (!CollectionUtils.isEmpty(updatebackIds)) {
                List<String> finalUpdatebackIds = updatebackIds;
                deleteBankList = oldBanList.stream().filter(m -> !finalUpdatebackIds.contains(m.getEmpBankacctId())).collect(Collectors.toList());
            } else {
                deleteBankList = oldBanList;
            }
        }
        //处理新增和删除的
        if (!CollectionUtils.isEmpty(insertBankList)) {
            insertBankList.stream().forEach(m -> {
                m.setDataChgType("1");//新增
            });
            //这里up主懒得new对象了,直接用交集对象上了,把差集都加上就是并集啦
            updateBankList.addAll(insertBankList);

        }
        if (!CollectionUtils.isEmpty(deleteBankList)) {
            deleteBankList.stream().forEach(m -> {
                m.setDataChgType("2");//删除
            });
             //这里up主懒得new对象了,直接用交集对象上了,把差集都加上就是并集啦
            updateBankList.addAll(deleteBankList);
        }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值