从groovy列表中逐个返回项目

时间:2016-09-08 15:51:59

标签: groovy

我对Groovy很陌生,而且我有点挣扎。我有一个List,我希望每次调用函数

时返回列表中的项目1
def list = [
    "blog1",
    "blog2",
    "blog3"
]
// Result variable for storing loop results.
def result = ''
// Closure to fill result variable with value.
def createResult = {
    if (!it) {  // A bit of Groovy truth: it == 0 is false
        result = '0'
    } else {
        result += it
    }
}

// Groovy for-each loop.
for (i in list) {
    createResult(i)
}
return result

现在我恢复了以下值:blog1blog2blog3

我想看看:

此代码的第一次调用返回博客1,函数返回博客2的第二次调用等。

如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

您正在描述Iterator

如果你想要一个包装迭代器并且没有异常处理列表末尾的闭包,你可以这样做:

def closure = { ->
    def i = ['item1', 'item2', 'item3'].iterator();
    { -> i.hasNext() ? i.next() : null }
}

def clos = closure()

println clos()
println clos()
println clos()
println clos()

打印哪些:

item1
item2
item3
null

不是100%确定你想要的是什么,从问题中很难说出来......

答案 1 :(得分:0)

您需要更改

result += it

为:

result = it

但最好使用迭代器:

def iter = list.iterator()
def getListValue = {iterator ->
    iterator.hasNext() ? iterator.next() : null
}
def createResult = getListValue.curry(iter)

println createResult()
println createResult()
println createResult()
相关问题