項目背景:
當向數據庫中插入企業信息時,如果企業庫中有該信息,則不進行插入;如果企業表中沒有該企業信息,則進行插入操作;
做法:
需要將企業庫中已有的企業id查詢出來,與要插入的一批企業信息做一下過濾操作;
坑:
list<CompanyInfo> list; //這是要插入的所有的企業信息
List<String> companyCodes; //這是企業表中有的企業編碼
//我們要根據companyCodes對list做一下過濾操作
//錯誤做法,隨着list的變小,for循環的次數也會變小;
for(CompanyInfo com : list){
if(companyCodes.contains(com.getCompanyCode)){
list.remove(com);
}
}
//錯誤做法2 這是一旦發生移除元素的操作,就是越界報錯
int size = list.size();
for(int i=0;i<size;i++){
if(companyCodes.contains(list.get(i).getCompanyCode){
list.remove(list.get(i));
}
}
//錯誤做法3,也會報錯,這是因爲list=list2,都是指向的一個引用對象,一個減小,另外一個也減小
List<CompanyInfo> list2 = list;
for(CompanyInfo com : list){
if(companyCodes.contains(com.getCompanyCode)){
list2.remove(com);
}
}
//正確做法:
list<CompanyInfo> res = new ArrayList<>();
for(CompanyInfo com : list){
res.add(com);
}
//此時再進行移除過濾操作即可。
for(CompanyInfo com : list){
if(companyCodes.contains(com.getCompanyCode)){
res.remove(com);
}
}
這是因爲隨着list的remove操作,它的大小會改變的,for循環的次數會動態改變的;