如何实现这个fn:
fun moreAndMore(seq: 序列): 序列 = TODO()
它接受一个输入序列,并首先从中获取第一个元素,然后是前 2 个元素,然后是前 3 个元素 等等
如果输入序列是有限的且长度为 n,则生成的序列必须具有 1 + 2 + 3 + .... + n 个元素
Empty 应该变成empty,singleton 变成singleton。
生成 1, 2, 3 的序列应转换为生成 1, 1, 2, 1, 2, 3 的序列
无限的序列应该变成无限的序列,每次都比原来的更进一步
如果输入序列是从迭代器(Iterator.asSequence)生成的 - 第二遍的尝试将中断 - 这是正常的。但空选项和单元素选项应该可以正常工作而不会丢失。
我们不使用可变性。好吧,除了缝在 Sequence 实现中的那个之外。
以下内容应该适合您。
fun <T> moreAndMore(sequence: Sequence<T>): Sequence<T> = sequence {
val iterator = sequence.iterator()
val items = mutableListOf<T>()
while (iterator.hasNext()) {
items += iterator.next()
yieldAll(items)
}
}