zoukankan      html  css  js  c++  java
  • Java里List取并集方法retainAll不能用来判断是否有重复数据!

    网上找的源码

    public boolean retainAll(Collection<?> c){

        boolean modified = false;
        Iterator<E> e = iterator();
        while (e.hasNext()){
            if (!c.contains(e.next())){
                e.remove();
                modified = true;
            }
        }
        return modified;
    }
    我用这个方法是做Excel导入功能的时候判断数据库里是否已存在制定编号。随便测试一下可用,可实际上没那么简单,最大一个坑就是如果你导入的数据是一模一样的,这个方法无法去判断是否有重复数据.
    从源码也能看出来!如果list1 有a,b,c三个值,而list2有b,c,d三个值.那么list1.retainAll(list2);之后会返回true,list1集合值为b,c。
    如果list1的值和list2的值都一样是a,b,c那么会返回false,list1值不变。
    如果list1的值为a,b,c,a,b,c,a,b,c那么还是会返回false,list1值不变。
    如果你拿了一个Excel导入多次是不能判断是否有重复数据的!
    如果list1的值为a,b,c,list2的值为d,e,f那么list1.retainAll()后list1就会被清空,list1.size()为0;
    如果想判断是否有重复数据,则要先用containsAll判断一下再用retainAll方法:
    if(dbCode.containsAll(excelCode)){
    return false;
    }else{
     boolean flag=dbCode.retainAll(excelCode);
        if(dbCode.size()==0){ 
        //如果dbCode.size()==0证明dbCode原本集合里的值和excelCode的值没一个对应的.
            return true;
        }
         return flag;

    }
  • 相关阅读:
    MySQL -- 表联结
    Unittest方法 -- 项目实现自动发送邮件
    Linux工作中常用命令
    Requests方法 -- Token获取操作
    Requests方法 -- 关联用例执行
    Requests方法 -- Blog流程类进行关联
    Requests方法 -- 参数化
    defer和async的区别
    js函数收藏:获取cookie值
    XSHELL使用技巧总结
  • 原文地址:https://www.cnblogs.com/345214483-qq/p/5029802.html
Copyright © 2011-2022 走看看