Collections 闭包集合。不同的调用方法。
在工作中,我们讨论的是一个简单(或不是那么简单)的问题。?以下调用方法之间有什么区别吗Collections 闭包集合。不同的调用方法。,collections,groovy,closures,Collections,Groovy,Closures,在工作中,我们讨论的是一个简单(或不是那么简单)的问题。?以下调用方法之间有什么区别吗 class Obj { def num def prtn = { print this.num } } def listObj = [new Obj(num:1), new Obj(num:2), new Obj(num:3), new Obj(num:4)] // End Common code // Method #1 def lst = list
class Obj {
def num
def prtn = {
print this.num
}
}
def listObj = [new Obj(num:1), new Obj(num:2), new Obj(num:3), new Obj(num:4)]
// End Common code
// Method #1
def lst = listObj.collect{ obj-> obj.prtn() }
// Method #2
def lst = listObj.collect{ obj-> { -> obj.prtn()} }.each{ it() }
// Common code
您还可以执行以下操作:
listObj*.prtn()
这与你的方法得出的结果相同#1这两个语句的副作用是相同的:它们打印“1234”。但返回值是不同的
prtn
方法总是返回null
,因此listObj.collect{obj->obj.prtn()}
的值是[null,null,null,null]
在listObj.collect{obj->{->obj.prtn()}的情况下,每个{it()}
返回调用它的集合,结果将是一个闭包对象列表(正如listObj.collect{obj->{->obj.prtn()}
返回的一样)
通常,如果您只想迭代一个集合以获得某些副作用,请使用每个
;如果要将其转换为其他集合,请使用collect
。并尝试“否”来混合副作用迭代和转换:)