我正在考虑带有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/