這篇文章主要講解了“Kotlin sequence序列生成以及generateSequence()、yield()函數(shù)的使用方法”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Kotlin sequence序列生成以及generateSequence()、yield()函數(shù)的使用方法”吧!
堅守“ 做人真誠 · 做事靠譜 · 口碑至上 · 高效敬業(yè) ”的價值觀,專業(yè)網(wǎng)站建設(shè)服務(wù)10余年為成都成都宣傳片制作小微創(chuàng)業(yè)公司專業(yè)提供企業(yè)網(wǎng)站制作營銷網(wǎng)站建設(shè)商城網(wǎng)站建設(shè)手機網(wǎng)站建設(shè)小程序網(wǎng)站建設(shè)網(wǎng)站改版,從內(nèi)容策劃、視覺設(shè)計、底層架構(gòu)、網(wǎng)頁布局、功能開發(fā)迭代于一體的高端網(wǎng)站建設(shè)服務(wù)。
sequence稱之為序列,也是一種容器類型--(Sequence
首先序列式惰性的,惰性的含義就是我們對序列進行各種一些列的變換的操作的時候,會對序列中的元素依次進行變換并且保存到Sequence對象里面,當(dāng)我們求情整個處理鏈的結(jié)果的時候才會進行最終的計算并且返回對應(yīng)的結(jié)果比如Int、Boolean、List
今天著重記錄了一下序列的基本使用以及sequence()函數(shù)的使用。
我們?nèi)绻胫苯觿?chuàng)建一個序列可以這樣直接創(chuàng)建:
val sequence1 = sequenceOf("a", "b", "c")
使用的時候我們可以直接toList進行l(wèi)ist的遍歷等操作。
還可以在List的基礎(chǔ)之上進行轉(zhuǎn)換序列操作:
val list = listOf("d", "e", "f")val sequence2 = list.asSequence()println(sequence2.toList())
就可以很輕松的進行序列的轉(zhuǎn)換了。
使用起來比較簡單,重要的就是要了解序列它的實現(xiàn)原理,它跟集合的不同的地方。
還有一種方式我們通過計算函數(shù)的方式來計算序列中元素的構(gòu)建過程。這時候我們要用到generateSequence()函數(shù)了,它是一個沒有邊界的序列,大小可以無限的生長,知道提供的元素的函數(shù)返回null為止,序列也就停止生成了。
val generateSequence = generateSequence(2) { it * 3}.take(10)println(generateSequence.toList())
其中的2的含義是說我們的序列從2開始然后根據(jù)傳入的函數(shù)參數(shù)規(guī)則進行生成序列元素,我們的這里的規(guī)則就是上一個元素*3就是下一個元素的值。
打印出來如下:
[2, 6, 18, 54, 162, 486, 1458, 4374, 13122, 39366]
這個是最基本的使用方式,我們看到take()函數(shù),它需要我們傳遞一個Int的數(shù)值,告訴序列我取到第十個的時候就停止了,序列也就不會再產(chǎn)生元素了。
點進去發(fā)現(xiàn)其實他返回的還是序列對象:
說明這個函數(shù)還不是最終的計算方法,返回的還是序列sequence對象,真正最后通過toList之后返回的就是一個集合了:
最后的返回就是一個集合了,這才是序列最后計算的時刻,同樣的toList函數(shù),這里就是序列的擴展函數(shù)了,使用方法就不一樣了。
還有一種實現(xiàn)方式可以終止函數(shù)的生成,不用take()函數(shù)來終止了,我們可以通過自己定義的元素生成函數(shù)來實現(xiàn):
val generateSequence1 = generateSequence(2){ if((it +3) < 20) it + 3 else null}println(generateSequence1.toList())
打印如下:
[2, 5, 8, 11, 14, 17]
當(dāng)生成的元素小于20的時候函數(shù)就會直接返回null,那么序列就停止生成了。
最后呢,我記錄了一下yield()函數(shù),翻譯過來是生產(chǎn)、產(chǎn)生的意思,那就顧名思義了。
使用方法看看這個例子:
val sequence = sequence { val start = 0 yield(start) // 依次放入序列之中 0 yieldAll(1..5 step 2) // 1、3、5 yieldAll(generateSequence(8) { it * 3 }) //8、24、72}
yield函數(shù)是對序列生產(chǎn)一個元素,放入序列之中,并且暫停sequence()函數(shù)執(zhí)行,直到下一個請求函數(shù)元素到來。
首先我們先往序列里面放入0這個元素,然后又放入一個list,規(guī)則step函數(shù) 1、3、5集合,最后通過generateSequence()通過函數(shù)生成元素并且最后我們take(7),取前七個為止輸出如下:
[0, 1, 3, 5, 8, 24, 72]
ok!
感謝各位的閱讀,以上就是“Kotlin sequence序列生成以及generateSequence()、yield()函數(shù)的使用方法”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對Kotlin sequence序列生成以及generateSequence()、yield()函數(shù)的使用方法這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!