Kotlin:满足谓词时停止迭代的函数

Kotlin:满足谓词时停止迭代的函数,kotlin,built-in,Kotlin,Built In,我在Kotlin中寻找一个函数,它在谓词完成后停止迭代: val services = listOf(service1, service2) ... var res: Result = null services.stopIfPredicateFulFilled { service -> res = service.doSomething() res != null } 虽然这个例子不是很好,因为res在每次迭代中都会被覆盖,但我希望意图是明确的。 forEach没有按照

我在Kotlin中寻找一个函数,它在谓词完成后停止迭代:

val services = listOf(service1, service2)
...
var res: Result = null
services.stopIfPredicateFulFilled { service ->
    res = service.doSomething()
    res != null
}
虽然这个例子不是很好,因为
res
在每次迭代中都会被覆盖,但我希望意图是明确的。
forEach
没有按照我期望的方式完成工作。因此,我想知道是否还有其他功能。

您可以使用函数和(它们是等效的,只是名称不同)。它们找到满足谓词的第一个元素并返回该元素,忽略所有剩余元素

services.find { service ->
    res = service.doSomething()
    res != null
}

好的,谢谢,我想没有函数在成功后立即返回
res
?@christianmeyer,确实没有这样的函数。但是,您可以使用延迟计算的序列,并通过组合使用
.asSequence().mapNotNull{…}.firstNotNull()
,从lambda返回
null
,获得所需的行为,除非它找到所需的结果。