是否有标准的Kotlin函数用于将Sequence拆分为头部和尾部?

我正在考虑带有签名的东西,例如fun <T> Sequence<T>.destruct(): Pair<T, Sequence<T>>? 它将返回null一个空序列,否则接收器的第一个和其余部分。

回答

我相信答案是“不”。此页面列出了所有标准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函数用于将Sequence拆分为头部和尾部?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>