Kotlin generateSequence不记得内部状态

时间:2019-04-10 17:09:48

标签: kotlin jvm

所以我正在学习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 :(得分:0)

我了解您的需求,但我认为这不适合序列的意图。它是对无限流的定义,可以多次使用以生成相同的流。

我想,如果要生成一组值切片,则必须做一些自己的包装和调整。以下是一些选项:

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)
}

答案 1 :(得分:0)

否,您无法保存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) 的状态。但是,您可以将所有物品都拿走,然后将它们拆分到单独的列表中。

url
(\(
    (?P<url>(?:[^()]*|(?1))+)
\))