Итак, я изучаю 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]
Я хотел бы, чтобы этот генератор запоминал внутреннее состояние последнего элемента и продолжал с него, есть ли встроенное решение для этого в Котлине?
Я понимаю вашу потребность, но я думаю, что это не соответствует цели последовательности. Это определение бесконечного потока, который можно использовать несколько раз для создания одного и того же потока.
Я думаю, вам придется сделать небольшую собственную упаковку и адаптацию, если вы хотите создать некоторый набор срезов значений. Вот несколько вариантов:
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)
}
Я бы также добавил ответ @Andrew Churilo
, в котором приводится пример использования subList
Нет, вы не можете сохранить состояние 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)
вы получили ответ?