【发布时间】:2016-01-31 14:05:05
【问题描述】:
Kotlin 提供了take 和takeWhile 方法,它们可以让一个Sequence<T> 的第一个n 项并将它们作为另一个序列单独处理,例如,drop 其中一些,map 到其他值等。
但是当我使用take和takeWhile时,序列的尾部被丢弃了。
现在,给定一个 once-constrained 序列,我如何将其任意前缀转换为另一个保留尾部的序列?
例子:
val seq = (1..10).asSequence().constrainOnce()
// emits 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
val modified = seq.changePrefix { take(5).map { -1 * it } }
// emits -1, -2, -3, -4, -5, 6, 7, 8, 9, 10
如何对多个前缀执行相同操作?
例子:
val seq = (1..10).asSequence().constrainOnce()
val modified = seq.changePrefixes(
{ take(3).map { it * -1 } },
{ drop(1).take(3).map { it * 100 } },
{ map { 0 } }
)
//emits -1, -2, -3, 500, 600, 700, 0, 0, 0
注意:这个问题是故意提出的,answered by the author。
【问题讨论】:
标签: iterator sequence kotlin tail