本篇解析 example-flow-02.kt。探讨 Kotlin 标准库中的 Sequence(序列)。
1. 什么是 Sequence?
Sequence<T> 提供了一种惰性求值的机制。
特点:
- 按需计算:只有在真正需要下一个元素(如调用
forEach)时,才会执行sequence { ... }块内的代码。 - 节省内存:不需要像
List那样一次性在内存中存储所有元素。 - **yield()**:在
sequence构建器中,使用yield(n)来产出值。
2. 局限性:同步阻塞
虽然 Sequence 是惰性的,但它是同步的。
- 在
sequence { ... }块内,你不能调用挂起函数(如delay)。 - 如果你在其中调用了
Thread.sleep(如本例所示),它会阻塞当前执行线程。
3. 开发者感悟
Sequence 非常适合处理 CPU 密集型的大数据集合,但不适合处理包含等待逻辑的异步任务。如果你需要在流式产出数据的同时不阻塞线程,那么你需要的是 Flow。