List過濾資料ConcurrentModificationException的坑
今天專案需要將採集到List資料過濾,SoEasy!刷刷的寫下了以下程式碼:
public static void main(String[] args) {
Filter filter = new Filter();
List<String> sss = new ArrayList<>();
sss.add("1");
sss.add("22");
sss.add("333");
sss.add("4444");
filter.filter(sss);
for (String ss : sss) {
System.out.println(ss);
}
}
public static class Filter {
/**
* @param source 傳入的要過濾的源資料
* @return 將過濾後的資料返回
*/
public List<String> filter(List<String> source) {
for (String ss : source) {
if (ss.length() < 3) {
source.remove(ss);
}
}
return source;
}
}
一執行,結果
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
at java.util.ArrayList$Itr.next(ArrayList.java:851)
at Main$Filter.filter(Main.java:37)
at Main.main(Main.java:25)
先說怎麼解決,就是Itorator去處理,只貼fiter方法:
public List<String> filter(List<String> source) {
Iterator<String> iterator = source.iterator();
while (iterator.hasNext()) {
if (iterator.next().length() < 3) {
iterator.remove();
}
}
return source;
}
執行結果正確:
333
4444
相關文章
- mysql資料過濾MySql
- [MYSQL -7]資料過濾MySql
- 解析資料踩過的坑
- 通過Vue的過濾器實現資料的資料脫敏Vue過濾器
- 過濾搜尋引擎的抓取資料
- 關於資料過濾的設計
- 使用SQL Server過濾資料的方法SQLServer
- [MYSQL-6] 過濾資料MySql
- 用Tcpdump過濾資料包TCP
- 使用MySQL之過濾資料MySql
- 資料泵過濾匯出資料的where條件
- Lambda表示式where過濾資料
- Mybatis的<if>標籤的坑,0會被過濾掉?MyBatis
- Java List集合去重、過濾、分組、獲取資料、求最值、合併、排序、跳資料和遍歷Java排序
- RangeBitmap提升Java流資料過濾效能Java
- Wireshark-過濾器-資料包解析過濾器
- OpenYurt 之 Yurthub 資料過濾框架解析框架
- tcpdump過濾資料包,結果不對?TCP
- 使用iptables實現資料包過濾(轉)
- 資料處理踩過的坑(不斷更新):
- WAD通過行選擇過濾另一個ITEM的資料
- 一個過濾重複資料的sql語句(轉)SQL
- PHP 對資料進行驗證和過濾PHP
- 資料庫知識點(5)——多列過濾資料庫
- Vue專案資料動態過濾實踐Vue
- 語義挖掘:靈玖大資料文字過濾大資料
- MongoDB之資料查詢(where條件過濾)MongoDB
- 資料採集之:巧用布隆過濾器提取資料摘要過濾器
- python 資料清洗之資料合併、轉換、過濾、排序Python排序
- 過濾Servlet--過濾器Servlet過濾器
- Python - pandas 利用 某一列的值過濾資料Python
- Java 中,Arrays 轉 List 的那些坑Java
- Elasticsearch 根據陣列長度過濾資料(qbit)Elasticsearch陣列
- ADO.NET 快速入門(十):過濾資料
- LINQ簡明教程:資料排序、分組、過濾排序
- 4、過濾器的使用及自定義過濾器過濾器
- Flask入門資料庫的查詢集與過濾器(十一)Flask資料庫過濾器
- 過濾