在迭代时是否有Groovy方法删除Collection的项目?在Java中,这是使用Iterator.remove()
:
Collection collection = ...
for (Iterator it=collection.iterator(); it.hasNext(); ) {
Object obj = it.next();
if (should remove) {
it.remove();
}
}
Groovy是否在其语言语法中提供了迭代删除,或者我是否使用Iterator.remove()
?
答案 0 :(得分:27)
> c = [1, 2, 3, 4, 5]
> c.removeAll { it % 2 == 0 }
> println c
[1, 3, 5]
你特别询问“迭代时”,你是否试图用/每个对象做一些事情?只要封闭的最后一个陈述仍然是真实的(如前所述),removeAll
仍然有效:
> c.removeAll {
* tmp = it * 10
* println "ohai ${it}*10=${tmp}"
* tmp >= 40
* }
ohai 1*10=10
ohai 2*20=20
ohai 3*30=30
ohai 4*40=40
ohai 5*50=50
> println c
[1, 2, 3]
闭包的返回值(最后一个语句的值,或显式的return
值)是真实的,它将用于确定应删除的内容。它不需要明确引用每个对象。