从groovy列表中删除项目

dra*_*ago 3 collections groovy

我想从groovy列表中删除一个项目.我试过以下:

    List<User>  availableUsers = []

    availableUsers = workers

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

我也尝试过:

availableUsers.remove(user)
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,列表都会被清空.有谁知道发生了什么事?

Fil*_*dor 13

你有没有尝试过

availableUsers - user
Run Code Online (Sandbox Code Playgroud)

Docu:http://groovy.codehaus.org/groovy-jdk/java/util/List.html#minus(java.lang.Object ) 我自己没有太多经验,但这就是我想要的.

  • @ PhatH.VU 1.让它运行,2.使其正常运行,3.让它快速运行.完全按照这个顺序:D但当然,你是对的. (3认同)

tim*_*tes 5

Fildor 是对的,但是如果您只想删除user列表中第一次出现的(减号将删除所有出现的),您可能需要类似的东西:

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


小智 5

如上所述,答案取决于您是否希望删除所有出现的项目...

myList = ['a','b','c', 'c']
myList -= 'c'
assert myList == ['a','b']
Run Code Online (Sandbox Code Playgroud)

...或者只是第一个实例。

myList = ['a','b','c', 'c']
myList.remove(myList.indexOf('c'))
assert myList == ['a','b','c'] 
Run Code Online (Sandbox Code Playgroud)

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