【Kotlin】Sequence
Sequence
在 Kotlin 中,Sequence
是一種延遲計算(lazy evaluation)的集合類型,用於處理大量或潛在無限數據的情況。Sequence
的主要特點是每次需要元素時才會進行計算,這有助於優化性能並節省內存。以下是 Sequence
的主要特點及用法:
特點
- 延遲計算:只有在需要元素時才會計算,這與立即計算(eager evaluation)不同。
- 中間操作和終端操作:中間操作(如 map、filter)是延遲計算的,終端操作(如 toList、sum)會觸發整個計算過程。
- 無限序列:可以處理無限長度的序列,只要終端操作不需要遍歷整個序列即可。
用法
創建 Sequence
可以從現有集合或使用生成函數來創建 Sequence
。
val sequence = sequenceOf(1, 2, 3, 4, 5)
從集合創建:
val list = listOf(1, 2, 3, 4, 5)
val sequenceFromList = list.asSequence()
使用生成函數創建:
val generatedSequence = generateSequence(1) { it + 1 }
中間操作
中間操作是延遲計算的,只有在終端操作觸發時才會計算。
val sequence = sequenceOf(1, 2, 3, 4, 5)
.map { it * 2 }
.filter { it > 5 }
上面的 map
和 filter
操作都不會立即執行。
終端操作
終端操作會觸發整個計算過程,並返回一個結果。
val result = sequence.toList() // [6, 8, 10]
常見的終端操作有 toList()
、sum()
、first()
、count()
等。
範例
fun main() {
val sequence = generateSequence(1) { it + 1 }
.map { it * 2 }
.filter { it % 3 == 0 }
// 取前五個符合條件的數字
val result = sequence.take(5).toList()
println(result) // [6, 12, 18, 24, 30]
}
在這個範例中,我們生成一個從 1 開始的無限序列,然後對每個數字乘以 2,再篩選出能被 3 整除的數字。最後使用 take(5)
取出前五個符合條件的數字並轉換成列表。
Sequence
在需要處理大量數據或無限數據流時特別有用,因為它可以有效地管理計算資源並避免不必要的計算。