网上找的源码
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;
}