Groovy相当于OCL forAll

Duš*_*ský 3 groovy ocl

什么是与OCL中的forAll方法等效的Groovy?


假设我有一个项目列表.

def items = new LinkedList<Item>();
Run Code Online (Sandbox Code Playgroud)

当且仅当所有项都符合特定条件时,Groovy表达谓词的方式是什么?


以下代码片段不起作用,因为内部返回仅跳出每个闭包的当前迭代,而不是跳出forAll方法.

boolean forAll(def items)
{
    items.each { item -> if (!item.matchesCriteria()) return false; };
    return true;
}
Run Code Online (Sandbox Code Playgroud)

下面的代码片段应该可以解决问题,感觉很麻烦而且不像Groovy.

boolean forAll(def items)
{
    boolean acceptable = true;
    items.each { item -> if (!item.matchesCriteria()) acceptable = false; };
    return acceptable;
}
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种方法来懒惰地评估谓词,以便在找到第一个不匹配的项目时完成评估.

tim*_*tes 6

你可以使用每一个

items.every { it.matchesCriteria() }
Run Code Online (Sandbox Code Playgroud)