【问题标题】:Collect only if result is not null仅在结果不为空时收集
【发布时间】:2014-01-25 05:18:00
【问题描述】:

我有一个集合,我想找到某些元素并对其进行转换。我可以在两个闭包中做到这一点,但我想知道是否可以只使用一个?

def c = [1, 2, 3, 4]

def result = c.findAll {
    it % 2 == 0
}

result = result.collect {
   it /= 2
}

我真正的用例是使用 Gradle,我想找到一组特定的文件并将它们转换为完全限定的包名称。

【问题讨论】:

    标签: groovy find gradle collect


    【解决方案1】:

    你可以使用findResults:

    def c = [1, 2, 3, 4]
    c.findResults { i ->
            i % 2 == 0 ?    // if this is true
                i / 2 :    // return this
                null        // otherwise skip this one
        }
    

    此外,如果没有任何元素满足条件(关闭),您将获得[]

    【讨论】:

    • 那一直就在我的眼皮底下……谢谢。 (当问题足够大时将接受作为答案)
    • 嗯,这和我的 OP 中的不太一样? findResults 在第一个非空元素之后停止。
    • 你输入的是 findResult 而不是 findResults ;-)
    • 啊,这解释了为什么我找不到它,我查看的是 Collection 文档,而不是 Iterable 文档,Collection 文档只有 findResult
    • 是的,在文档中很难找到一些东西... List、Iterable、Collection 或 Object 有时都是候选页面;-)
    猜你喜欢
    • 2021-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-03
    • 1970-01-01
    • 2020-10-26
    相关资源
    最近更新 更多