java去除重复信息方案分析

今天在做项目的时候,需要对接口传来的所有数据进行剔除重复数据的处理,处理后再与自己数据库中的数据进行比对。
接口传来的数据,最开始我想到的是使用foreach循环进行处理,把传的数据放到list中,再与获取的值进行比对,相同的话进行更新或者移除元素。

if(StringUtils.isNotEmpty(insertList)){
                                insertList.stream().forEach(s->{
                                    if(model.getCode().equals(s.getCode())){
                                        //updateList.add(model);
                                        insertList.remove(model);
                                    }
                                        insertList.add(model);
                                });
                            }else {
                                insertList.add(model);
                            }

本以为写的挺好,但运行时候java.util.ConcurrentModificationException异常,换了迭代器方法同样报错,分析原因:本身就是对insertList的流进行循环操作,但是又对insertList进行了添加,移除操作改变的insertList的长度而出错。

之后重新修改使用for循环进行去重

for (int i = 0; i < insertList.size(); i++) {
                                    if (model.getCode().equals(insertList.get(i).getCode())) {
                                        insertList.remove(i);
                                        i--;
                                    }
                                }

上面代码意思也就是对insertList中元素虽然移除后,可以进行i–,把循环标志回退一位,这样就不会出现少一次遍历而报错。分析:通过上面的代码虽然能运行成功但并不是最优解,因为本身的数据与自己数据库比对会执行一次循环,去重又会执行一次循环,会加大运算量。

Map<Model> insertMap = new HashMap();
insertMap.put("数据比对唯一标识","存入的数据")
List<Model> insertList = new ArrayList<>(insertMap.values());

可以使用map,其机制本身就是不允许放重复数据,这样就减少了一次的循环。然后再把map转换为list进行更新或插入操作就好啦!
我也是刚工作的小白,有什么更好方法欢迎评论,一起成长。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值