集合的函式式 api 有很多種,我們只重點學習函式式 api 的結構,也就是 lambda 表示式的語法結構
要求:在集合中找出名字最長的那個值:
fun
main()
}print
("max is $maxlength"
)}
以上雖然說是一段很清晰的**,但是如果使用函式式程式設計,可以變的更加簡單:
fun
main()
print
("max is $maxlength"
)}
以上就是函式式 api 的用法,只用一行**就可以找到最長的名字,現在看可能還會摸不著頭腦,那是因為我們還沒有學習 lambda 表示式的語法結構,那就上 lambda 的語法結構
lambda 是一小段可以作為引數傳遞的**
一般來說,我們向某個函式傳參時只能傳入變數,而借助 lambda 卻可以傳入一小段**,那麼多長才算一小段**呢?kotlin 沒有對此進行限制,但通常不建議在 lambda 中寫太長的**,否則可能會影響**的可讀性
lambda 語法結構
首先最外層是乙個大括號,如果有資料傳入到 lambda 表示式當中的話,我們還需要宣告引數列表,引數列表的結尾使用的是 -> 符號,表示引數列表的結束以及函式體的開始,並且最後一行會自動作為 lambda 的返回值
在很多情況下,我們不需要使用 lambda 的完整的語法結構,而是有很多種簡化的寫法,但是簡化版的似乎更難理解,我們一步步推倒簡化版的由來,從而理解 lambda 表示式的語法結構
回到剛才尋找最長單詞的要求,前面使用的函式式 api 的語法結構看上去好像很特殊,但其實 maxby 就是乙個普通的函式而已,只不過他接收的是乙個 lambda 型別的引數,並且在遍歷集合的時候將每次遍歷的值作為引數傳給 lambda 表示式. maxby 函式的工作原理是根據我們傳入的條件來遍歷集合,從而找到該條件下的最大值,所以說剛好符合我們查詢最大長度的單詞的需求
現在來演示一下推倒過程
根據以上的工作原理可得:
fun
main()
val maxlength = list.
maxby
(lambda)
print
("max is $maxlength"
)}
可以看到 maxby 函式實質上就是接收了乙個 lambda 函式而已,並且這個 lambda 函式完全可以按照剛剛說的表示式的語法結構來定義
這種寫法雖然可以工作,但是比較囉嗦,可簡化的點也很多
首先,我們不需要專門定義乙個lambda變數,而是可以將lambda表示式直接傳入函式當中:
val maxlength = list.
maxby
()
kotlin規定,當lambda引數是函式的最後乙個引數時,可以將 lambda 表示式移動到函式的括號外面:
val maxlength = list.
maxby()
如果 lambda 引數是函式唯一的引數的話,還可以將函式的括號省略:
val maxlength = list.
maxby
由於 kotlin 擁有出色的型別推到極致, lambda 表示式中的引數在大多數情況下不必宣告引數型別:
val maxlength = list.
maxby
當 lambda 表示式的引數列表中只有陽光引數時,也不用宣告引數名,可以使用 it 關鍵字來代替:
val maxlength = list.
maxby
這就是最初的我們的那種寫法
map集合中的 map 函式是最常用的一種函式式 api ,他用於將集合中的每個元素都對映成乙個另外的值,對映的規則在 lambda 表示式中指定,最終生成乙個新的集合. 比如我們把所有的名稱都變成大寫:
fun
main()
for(name in maxlength)
}
map 的功能非常強大,他可以按照我們的需求對集合中的元素進行任意的對映轉換,只需要在 lambda 中編寫你需要的邏輯即可
filter
filter 函式是用來過濾集合中的資料都,他可以單獨使用,也可以配合剛才的 map 函式一起使用
比如我們只保留兩個字母以內的,就可以借助 filter 來實現
fun
main()
.map
for(name in maxlength)
}
需要注意呼叫順序來提高效率
any和all
any 用於判斷集合中是否至少存在乙個元素滿足指定條件
all 用於判斷集合中是否所有的元素都滿足指定條件
fun
main()
val allresult = list.
allprintln
("anyresult is $anyresult, allresult is $allresult"
)}
kotlin 特殊集合之序列
1.先看段 直觀感受序列的優點,速度快 1 序列操作又稱惰性集合操作,在對集合進行鏈式操作 對映 過濾 變換 不需要像普通集合那樣,每進行一次資料操作都需要開闢新的記憶體儲存中間結果 author hc date 2019 09 25 12 05 fun main args array map su...
Kotlin 函式式程式設計 一
今天開始學習kotlin的第二大思想,函式式程式設計。函式式程式設計在中一切都是函式。核心概念 函式和其它資料型別是一樣的,可以作為其它函式的引數傳入,也可做為函式的返回值。使用表示式,不用語句。高階函式 乙個函式可做為另乙個函式的引數和返回值 無 函式執行過程會返回乙個結果,不會修改外部變數 函式...
kotlin集合的遍歷
mutablelist 可變集合list 不可變集合 只能取,不能新增和修改 發現不可變集合 新增元素會報錯 迴圈遞增,不包含最後一位 比如 0 util 10 實際上是 0 到9 val listtype type object typetoken type printsettinglist sh...