加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何从一个groovy闭包返回并停止执行?

发布时间:2020-12-14 16:38:58 所属栏目:大数据 来源:网络整理
导读:我想从一个闭包返回,就像一个如果在循环中使用break语句。 例如: largeListOfElements.each{ element- if(element == specificElement){ // do some work return // but this will only leave this iteration and start the next }} 在上面的if语句中,我
我想从一个闭包返回,就像一个如果在循环中使用break语句。

例如:

largeListOfElements.each{ element->
    if(element == specificElement){
        // do some work          
        return // but this will only leave this iteration and start the next 
    }
}

在上面的if语句中,我想停止迭代通过列表,并离开闭包,以避免不必要的迭代。

我看到一个解决方案,其中一个异常抛出的闭包,并抓到外面,但我不太喜欢那个解决方案。

有没有任何解决方案,除了改变代码,以避免这种算法?

解决方法

我想你想使用find而不是每个(至少对于指定的示例)。闭包不直接支持break。

在封面下,groovy实际上不使用闭包或者为find,它使用for循环。

或者,您可以编写自己的增强版本的find /每个迭代器接受一个条件测试闭包,另一个闭包调用如果找到匹配,如果匹配被满足,它断开。

这里有一个例子:

Object.metaClass.eachBreak = { ifClosure,workClosure ->
    for (Iterator iter = delegate.iterator(); iter.hasNext();) {
        def value = iter.next()
        if (ifClosure.call(value)) {
            workClosure.call(value)
            break
        }        
    }
}

def a = ["foo","bar","baz","qux"]

a.eachBreak( { it.startsWith("b") } ) {
    println "working on $it"
}

// prints "working on bar"

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读