Kotlin generateSequence не помню внутреннего состояния - PullRequest
0 голосов
/ 10 апреля 2019

Итак, я изучаю Kotlin, и у меня есть вопрос о generateSequence

val numberGenerator: Sequence<Int> = generateSequence(0) { it + 1 }
println(numberGenerator.take(10).toList())
println(numberGenerator.take(3).toList())

Код выше сгенерировал эти результаты:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2]

Я бы хотел получить вот что:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[10, 11, 12]

Я бы хотел, чтобы этот генератор запомнил внутреннее состояние последнего элемента и продолжил с него. Есть ли в Kotlin встроенное решение для этого?

Ответы [ 2 ]

0 голосов
/ 10 апреля 2019

Нет, вы не можете сохранить состояние Sequence.Но вы можете взять все предметы и разделить их на отдельные списки.

val numberGenerator: Sequence<Int> = generateSequence(0) { it + 1 }
val fullList = numberGenerator.take(13).toList()
val part1 = fullList.subList(0, 10)
val part2 = fullList.subList(10, 13)
println(part1)
println(part2)
0 голосов
/ 10 апреля 2019

Я понимаю вашу потребность, но я думаю, что это не соответствует цели Последовательности.Он предназначен для определения бесконечного потока, который можно использовать несколько раз для генерации одного и того же потока.

Я думаю, вам придется немного поэкспериментировать и адаптировать, если вы хотите произвестинекоторый набор кусочков значений.Вот несколько вариантов:

fun main() {
    val myList = generateSequence(0) { it + 1 }.take(10).toList()
    val myList2 = generateSequence(10) { it + 1 }.take(3).toList()
    println(myList)
    println(myList2)

    val myListV2 = List(10) { index -> index }
    val myListV2_2 = List(3) { index -> 10 + index }
    println(myListV2)
    println(myListV2_2)

    val myListV3 = (0..9).toList()
    val myListV3_2 = (10..12).toList()
    println(myListV3)
    println(myListV3_2)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...