2016-04-19 74 views
-4

我有一個foreach循環迭代通過一個數組列表。從列表中刪除一個項目的每個循環導致java.util.ConcurrentModificationException

在for循環的主體中,我有一個if條件從列表中刪除當前項目。

for (item in mylist){ 
    if(some condition is met) 
     mylist.remove(mylist.indexOf(item)) 
} 

但是,這是造成java.util.ConcurrentModificationException被拋出,是非法爲此在Groovy中,如果是的話我怎麼能過去嗎?

+1

下一次:做事先研究。它總是讓我感到驚訝,有多少人認爲他們是第一個遇到這種問題的人... – GhostCat

回答

0

使用迭代器很容易實現在遍歷列表時刪除。

我會提供一個小的(不言自明)這裏的例子:

List<String> foo = new ArrayList<String>(); 
// fill foo with data 
Iterator<String> it = foo.iterator(); 
while (it.hasNext()) { 
    String s = it.next(); 
    if (s.equals("B")) 
     foo.remove("B"); 
} 
0

如果你不介意創建一個新的列表(而不是修改原來的),然後是相當慣用的方法是:

mylist = mylist.findAll{ !some condition is met } 

否則,如果你想修改的集合,你可以使用removeAll/retainAll方法,只是使用:

mylist.removeAll{ some condition is met } 
+0

啊,過山車乘坐的stackoverflow投票:) - 任何人都在關注詳細降價? – rhinds

+0

猜測這是java人,因爲這個問題被誤標了。 'findAll'是慣用的groovy解決方案 –

+0

Ahh沒錯 - 我打算評論OP,因爲他們明確地詢問它是否允許使用groovy,並且鏈接的重複問題都是java,但不想引起SO羣衆! – rhinds

相關問題