1. 先看段**,直觀感受序列的優點,速度快
/**[1] 序列操作又稱惰性集合操作,在對集合進行鏈式操作(對映、過濾、變換),不需要像普通集合那樣,每進行一次資料操作都需要開闢新的記憶體儲存中間結果
* author: hc
* date: 2019-09-25 = 12:05
*/fun main
(args: array
).map
.sum()
.run
}//[3] 轉換成序列 來做處理
//10000000 數量: 耗時 104
//1_0000_0000 級別: 856
computeruntime
.map
.sum()
.run }}
fun computeruntime
(action:((
)-> unit)?)
")}
2. sequence 建立//[1] 類似 listof 方式
val seq =
sequenceof
("a"
,"b"
,"c"
)//[2] 列表使用 assequence 方法,上面就是這個方式
val list =
listof
("a"
,"b"
,"c"
)list.
assequence()
//[3] 使用 lambda 表示式, 0 代表第乙個元素
val seq =
generatesequence(1
)//生成 10個
println
(seq.
take(10
).foreach
)
3. 更深一步看 sequence 的原理//[1] 下面的**和輸入,可以看到普通列表的流式表示式是乙個個執行下去,類似廣度優先,這在 filter 、take 這種命令就會浪費;
// 而 sequence 就是乙個執行到位在執行下乙個,類似深度優先
fun main2()
.take(2
).map
.sum()
.run
/* 輸出
map1
.. (8個)
map1
map2
map2
*/(0.
.normal_v)
.assequence()
.map
.take(2
).map
.sum()
.run
/* 輸出:
map1
map2
map1
map2
*/}
4. sequence 懶載入優點- 一旦滿足遍歷退出條件,就可以省略後續不必要的遍歷過程
- 像list 這種實現 iterable 介面的集合類,每呼叫一次函式就會生成乙個新的 iterable ,導致額外的記憶體消耗
Kotlin的特殊類
一 資料類 1.1 使用 我們經常建立一些資料類來儲存乙個物件的屬性和狀態,在這些類中一些標準的get set函式都是機械推導出來的,在kotlin中這些類被標記為資料類,使用關鍵字data宣告 data class user val name string,var age int 編譯器自動從資料...
Kotlin之集合的函式式API Lambda
集合的函式式 api 有很多種,我們只重點學習函式式 api 的結構,也就是 lambda 表示式的語法結構 要求 在集合中找出名字最長的那個值 fun main print max is maxlength 以上雖然說是一段很清晰的 但是如果使用函式式程式設計,可以變的更加簡單 fun main ...
kotlin 學習筆記之 集合 寫操作
可變集合支援更改集合內容的操作,例如新增或刪除元素。在此頁面上,我們將描述實現 mutablecollection 的所有寫操作。有關 list 與 map 可用的更多特定操作,請分別參見 list 相關操作與 map 相關操作。要將單個元素新增到列表或集合,請使用 add 函式。指定的物件將新增到...