kotlin - 是否有标准的Kotlin函数将Sequence分为头和尾?

标签 kotlin

我正在考虑带有fun <T> Sequence<T>.destruct(): Pair<T, Sequence<T>>? 之类的签名的东西,该签名将为空序列返回null,否则为接收者的第一个和其余的一对。

最佳答案

我相信答案是“不”。 This page列出了所有标准的Sequence函数,并且搜索“pair”并不会显示任何与您想要的内容匹配的内容。
也就是说,有一个标准的firstOrNull()函数和一个drop()函数,因此您可以轻松编写自己的代码:

fun <T> Sequence<T>.destruct() =
    firstOrNull()?.let { it to drop(1) }

如果您使用只能被使用一次的序列,则上述方法将不起作用(因为firstOrNull()和(最终)DropSequence都将调用接收者的iterator()方法)。您可以通过遵循相同的一般思路来解决此问题,但要更明确地了解iterator()的调用方式:
fun <T> Sequence<T>.destruct(): Pair<T, Sequence<T>>? {
    val iterator = iterator()
    
    return if (iterator.hasNext()) {
        iterator.next() to iterator.asSequence()
    } else {
        null
    }
}

关于kotlin - 是否有标准的Kotlin函数将Sequence分为头和尾?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65397653/

相关文章:

kotlin - 你怎么知道什么时候需要 yield()?

list - 更新Kotlin列表

android - 如何将回调从 Activity 传递到 fragment

gradle - 配置Gradle Kotlin DSL以使用自定义存储库

reflection - 如何从kotlin中的KParameter获取类引用?

lambda - Null 或空 lambda 作为默认值

testing - KoinAppAlreadyStartedException : A Koin Application has already been started

Kotlin:在哪些情况下会发生隐式转换?

kotlin - 如何将 -Xopt-in=kotlin.ExperimentalUnsignedTypes 应用于所有子项目?

java - 在 Kotlin 中开发的 Android 库模块导出到 Java 应用程序导致 : Lkotlin/jvm/internal/Intrinsics 解析失败