【问题标题】:How to use the `every` and the `any` Groovy methods?如何使用 `every` 和 `any` Groovy 方法?
【发布时间】:2017-03-19 01:10:36
【问题描述】:

我试图了解every and any 这两种方法的工作原理。我以为我有,但没有。这是我的例子:

assert (["Test", "Case", "Way"].findAll {it ==~ /^r[a-z0-9]*/}.isEmpty()) == true
assert (["Test", "Case", "Way"].findAll {it ==~ /^r[a-z0-9]*/}.every { it.startsWith("intTest") }) == true

尽管没有一个数组元素与模式匹配,但我总是在这里得到正确的结果,因此它们都不能以“intTest”开头。

【问题讨论】:

    标签: groovy


    【解决方案1】:

    您的列表中没有元素。

    逻辑上,every 如果列表为空,则返回 true(因为集合中的每个元素——全部为 0——通过了测试)

    assert [].every { it == 1 } == true
    

    【讨论】:

    • 感谢您的回答@tim-yates。
    • 但是我会认为它是另一个 Groovy 的 陷阱,而不是 逻辑 ;-) 因为有 no 列表中的元素,它们都没有通过测试。无论如何,+1
    • @Niko 如果它回答了你的问题,请接受这个答案。
    • 所以你可以切换它来使用any:assert (["Test", "Case", "Way"].findAll {it ==~ /^r[a-z0-9]*/}.any { !it.startsWith("intTest") }) == false
    • @tim_yates 我知道,我已经检查了实现,所以我知道它应该以这种方式工作......我只是说一开始可能会令人惊讶。
    猜你喜欢
    • 2023-02-17
    • 1970-01-01
    • 2023-01-04
    • 1970-01-01
    • 1970-01-01
    • 2021-03-04
    • 2014-08-09
    • 2014-12-20
    • 2011-01-30
    相关资源
    最近更新 更多