作者:细野本尊 | 来源:互联网 | 2023-08-31 19:51
我正在考虑带有签名的东西,例如fun Sequence.destruct(): Pair>?
它将返回null
一个空序列,否则接收器的第一个和其余部分。
回答
我相信答案是“不”。此页面列出了所有标准Sequence
功能,搜索“pair”并不会找到与您想要的匹配的任何内容。
也就是说,有一个标准firstOrNull()
函数和一个drop()
函数,所以你可以很容易地编写自己的函数:
fun Sequence.destruct() =
firstOrNull()?.let { it to drop(1) }
如果您正在使用只能使用一次的序列,则上述方法将不起作用(因为两者firstOrNull()
和(最终)DropSequence
都会调用接收器的iterator()
方法)。您可以通过遵循相同的一般思想但更明确地说明如何iterator()
调用来解决此问题:
fun Sequence.destruct(): Pair>? {
val iterator = iterator() return if (iterator.hasNext()) {
iterator.next() to iterator.asSequence()
} else {
null
}
}