You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin:如何更简洁返回集合首个成功结果或最后失败结果

Kotlin惯用风格实现:返回首个成功Result,全失败则返回最后一个失败结果

你的需求是遍历集合元素,尝试每个元素后返回首个成功的Result;若所有尝试均失败,则返回最后一次的失败结果。以下是几种更符合Kotlin惯用风格的简洁实现:

方式一:简洁for循环(推荐,短路执行+逻辑清晰)

直接用for循环遍历,记录每次尝试结果,遇到成功立即返回,去掉了冗余的let嵌套,逻辑更直观:

fun returnFirstSuccess(keys: List<String>): Result {
    var lastResult: Result? = null
    for (key in keys) {
        lastResult = tryKey(key)
        if (lastResult is Result.Success) {
            return lastResult
        }
    }
    return lastResult!!
}

这个版本保持了短路特性(遇到成功就停止后续尝试),代码清爽易读,是最贴合Kotlin惯用写法的方案。

方式二:run代码块封装

用run块包裹逻辑,避免临时变量污染外部作用域,同样支持短路执行:

fun returnFirstSuccess(keys: List<String>): Result = run {
    var lastResult: Result? = null
    keys.forEach { key ->
        lastResult = tryKey(key)
        if (lastResult is Result.Success) return@run lastResult
    }
    lastResult!!
}

适合偏好函数式代码风格的场景,逻辑和for循环完全一致。

注意:避免非短路实现

不要使用map+firstOrNull的写法,因为它会提前执行所有tryKey调用,无法短路,在tryKey有副作用或耗时操作时会浪费性能:

// 不推荐:会执行所有tryKey调用,无短路特性
fun returnFirstSuccess(keys: List<String>): Result {
    val results = keys.map { tryKey(it) }
    return results.firstOrNull { it is Result.Success } ?: results.last()
}

内容的提问来源于stack exchange,提问作者pixel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 15:33:28