集合删除元素的写法

这种先遍历筛选出符合条件的元素存放到一个临时的集合中,待遍历结束的时候再删除集合中含有临时集合的元素的元素,这样就不会报错。

1
ArrayList<DownloadObserver> removeObserverList=new ArrayList<>(); 2 for(DownloadItem item:downloadList){ 3 if(item.checked){ 4 int position=downloadList.indexOf(item); 5 mContext.getContentResolver().unregisterContentObserver(downloadObservers.get(position)); 6 removeObserverList.add(downloadObservers.get(position)); 7 } 8 } 9 downloadObservers.removeAll(removeObserverList);
这种遍历Collection筛选出符号条件的元素然后删去,本身代码读起来觉得没有错,可是执行的时候就会报java.util.ConcurrentModificationException异常。
for
(DownloadItem item:downloadList){ if(item.checked){ int position=downloadList.indexOf(item); mContext.getContentResolver().unregisterContentObserver(downloadObservers.get(position)); downloadObservers.remove(item); } }
 这是使用RecyclerView时常用的刷新数据的形式,再做一些比较耗时的工作的时候不要直接把数据写入RecyclerView相关的数据中,而是写入一个临时的集合中,待工作结束一次性提交到RecyclerView相关数据中,然后再刷新,不然的话会报数组下标越界异常,这属于RecyclerView的一个BUG


1
List<Map<String,String>> tmp=new ArrayList<>(); 2 for(AppInfoItem appItem:appList){ 3 Map<String,String> app=new HashMap<>(); 4 app.put(AppMapField.APP_ICON_URL,appItem.getApp_icon_url()); 5 app.put(AppMapField.APP_NAME,appItem.getApp_name()); 6 app.put(AppMapField.APP_SIZE,appItem.getApp_size()); 7 app.put(AppMapField.APP_DOWNLOAD_SUM,appItem.getApp_download_sum()); 8 app.put(AppMapField.APP_RATING,appItem.getApp_rating()); 9 app.put(AppMapField.APK_URL,appItem.getApk_url()); 10 tmp.add(app); 11 } 12 int insertPosition=appInfoList.size(); 13 appInfoList.addAll(tmp);15 appAdapter.notifyItemInserted(insertPosition);

 

posted @ 2015-06-29 20:34  LinuxCC  阅读(1117)  评论(0)    收藏  举报