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

Kotlin是否存在谓词支持传入位置参数的findFirst类函数?

Kotlin 标准库相关能力说明

Kotlin 标准库没有直接提供签名完全匹配你预期调用形式的内置函数,但可以通过两种非常简单的方式实现完全一致的效果:

  • 直接使用标准库现有组合能力,无需额外封装:借助withIndex()将原始列表包装为携带元素索引的IndexedValue序列,再配合firstOrNull()(别名find())即可实现带索引条件的查找,示例代码如下:
// 仅获取匹配到的元素本身
val targetItem = list.withIndex().firstOrNull { (index, item) ->
    index > 19 && item.active
}?.value

// 如果需要同时拿到匹配元素和它的索引,直接保留IndexedValue结果即可
val indexedResult = list.withIndex().firstOrNull { (index, item) ->
    index > 19 && item.active
}
// indexedResult?.index 就是匹配位置,indexedResult?.value 就是匹配元素

这里的解构写法参数顺序、逻辑判断形式和你预期的写法几乎完全一致,不需要引入任何额外依赖。

  • 如果你希望严格按照你写的findXXX形式调用,只需要自己实现一个极短的通用扩展函数即可,代码如下:
inline fun <T> Iterable<T>.findIndexed(
    predicate: (index: Int, item: T) -> Boolean
): T? {
    forEachIndexed { index, item ->
        if (predicate(index, item)) return item
    }
    return null
}

定义完这个扩展后,就可以完全按照你期望的写法直接调用:

val result = list.findIndexed { index, item ->
    index > 19 && item.active
}

补充:如果需要查找最后一个符合条件的元素,要么用withIndex().lastOrNull(),要么参照上面的扩展自行实现findLastIndexed即可,逻辑完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 09:18:17