2013-04-25 32 views
2

我正在嘗試從常規列表中刪除項目。我試過以下:從常規列表中刪除項目

List<User> availableUsers = [] 

    availableUsers = workers 

    for (int i = 0; i < availableUsers.size(); i++) { 
     if (availableUsers[i].equals(user)){ 
      availableUsers.drop(i) 
      break 
     } 
    } 

我也試過:

availableUsers.remove(user) 

在這兩種情況下,該列表被清空。有誰知道發生了什麼事?

+1

下降是不正確的:http://groovy.codehaus.org/groovy-jdk/java/util/List.html #drop(int) – Fildor 2013-04-25 10:06:53

回答

3

Fildor是正確的,但如果你只是想OT去除user第一次出現在列表中(零下將刪除所有實例),你可能會需要這樣的東西:

list = list.indexOf(user).with { idx -> 
    if(idx > -1) { 
    new ArrayList(list).with { a -> 
     a.remove(idx) 
     a 
    } 
    } 
    else list 
} 
9

你試過

availableUsers - user 

Docu:http://groovy.codehaus.org/groovy-jdk/java/util/List.html#minus(java.lang.Object) Groovy自己沒有太多的經驗,但這就是我想要的。

+1

當您處理大型列表並且數據複雜時,列表的減號操作符不是最佳選擇。 請參閱:http://rewoo.wordpress.com/2012/11/19/the-weak-performance-of-the-groovy-minus-operator/ – 2014-01-08 07:51:55

+3

@ PhatH.VU 1.讓它運行,2.使它運行正常,3.使其運行速度很快。按照正確的順序:D但是,當然,你是對的。 – Fildor 2014-01-12 16:53:11

0

我做了一個有關要求但想要刪除多個知道其索引位置的項目。這是不容易做一個循環作爲後刪除第一項,其餘的索引位置的變化。首先創建一個包含要刪除項目的列表,然後使用收集減除操作將它們從目標列表中刪除,似乎很容易。下面是一個例子:

myList=['a','b','c','d'] 
remove=[0,1,2] //index list of list elements to remove 
removeList=myList[remove] 
println removeList 
assert ['d']== myList.minus(removeList) 

限制:如果在索引值在目標列表中出現多次,所有實例都被刪除。

所以,如果

myList=['a','b','c','d','a','e'] 
remove=[0,1,2] 
removeList=myList[remove] 
assert myList.minus(removeList)== ['d','e'] 

的結果將是第d,e