Kotlin集合/序列中获取首个满足条件元素及之前元素的单行实现
解决方案
针对你的需求,直接用Kotlin标准库的组合运算符就能实现单行解决方案:
针对列表(List)的简洁写法
yourList.take(yourList.indexOfFirst(predicate) + 1)
细节说明:
indexOfFirst(predicate)会返回第一个满足谓词条件的元素索引,若没有匹配元素则返回-1;take(n)取列表前n个元素,当无匹配元素时,take(0)会返回空列表,符合预期逻辑。
比如对应你给出的示例:listOf(1,2,3,4,...n) 搭配谓词 { it == 3 },indexOfFirst 返回2,take(3) 就会得到 [1,2,3],完全匹配需求。
针对序列(Sequence)的优化写法(避免全量遍历)
如果处理的是大数据量序列,为了避免提前遍历整个序列,可使用序列操作组合:
yourSequence.run { takeWhile { !predicate(it) }.plus(firstOrNull(predicate)).filterNotNull().toList() }
这个写法会在找到第一个满足条件的元素后立即停止遍历,不会处理后续元素,性能更优。
内容的提问来源于stack exchange,提问作者atulgpt
相关产品推荐
相关产品推荐

