Kotlin предоставляет методы take
и takeWhile
, которые позволяют брать первые n
элементов Sequence<T>
и обрабатывать их отдельно как другую последовательность, например, drop
некоторые из них, map
другие значения и т. д.
Но когда я использую take
и takeWhile
, хвост последовательности отбрасывается.
Теперь, учитывая однократно ограниченную последовательность, как мне преобразовать ее произвольный префикс в другую последовательность, сохраняющую хвост, если он остается?
Пример:
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
Примечание. Вопрос задан намеренно и ответил автор.