Collections 从groovy列表中删除项

Collections 从groovy列表中删除项,collections,groovy,Collections,Groovy,我正在尝试从groovy列表中删除一项。我试过以下几点: List<User> availableUsers = [] availableUsers = workers for (int i = 0; i < availableUsers.size(); i++) { if (availableUsers[i].equals(user)){ availableUsers.drop(i)

我正在尝试从groovy列表中删除一项。我试过以下几点:

    List<User>  availableUsers = []

    availableUsers = workers

    for (int i = 0; i < availableUsers.size(); i++) {
        if (availableUsers[i].equals(user)){
            availableUsers.drop(i)
            break
        }
    }
在这两种情况下,列表都会被清空。有人知道发生了什么事吗

你试过了吗

availableUsers - user
?

文件单元:
我自己对groovy没有太多的经验,但我会尝试这样做。

Fildor是对的,但是如果您只想删除列表中第一个出现的
user
(减号将删除所有出现的内容),您可能需要以下内容:

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

我有一个相关的要求,但想删除多个知道其索引位置的项。在循环中执行并不容易,因为在删除第一个项目后,其余项目的索引位置会发生变化。首先创建一个包含要删除项的列表,然后使用collections减号操作将其从目标列表中删除似乎很容易。以下是一个例子:

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

,如上所述,答案取决于您是否希望删除某个项目的所有匹配项

myList = ['a','b','c', 'c']
myList -= 'c'
assert myList == ['a','b']
…或者只是第一次

myList = ['a','b','c', 'c']
myList.remove(myList.indexOf('c'))
assert myList == ['a','b','c'] 

我自己对Groovy还是新手,但其中一个基本原则是,它几乎总是有一种方法可以让普通任务变得简单。从集合中添加或删除项目肯定符合条件。

drop不正确:在处理大型列表及其数据复杂时,列表的减号运算符不是最佳选择。请参阅:@PhatH.VU 1。让它运行,2。让它正确运行,3。让它跑得快。按顺序:D,当然,你是对的。
myList = ['a','b','c', 'c']
myList.remove(myList.indexOf('c'))
assert myList == ['a','b','c']