許多現代高級語言在很早之前就開始支持Lambda編程,但是Java到JDK 1.8之後纔開始支持,導致大量早期Java和Android開發並未使用Lambda編程的特性
而Kotlin從第一個版本就開始了對Lambda的支持,並且Kotlin中的Lambda極爲強大,我們來開始進行Lambda的入門
集合的創建與遍歷
集合的函數式API是用來入門 Lambda 的絕佳示例
傳統意義上的集合主要是List和Set,再廣泛的話Map這樣包括鍵值對的也可以包含進來
List的主要實現類是ArrayList和LinkedList
Set的主要實現類是HashSet
Map的主要實現類是HashMap
以上是Java中非常熟悉的集合
現在有一個要求,創建包含許多水果名稱大集合,在Java中可以創建一個ArrayList,將水果名稱一個個添加到集合當中,當然Kotlin也可以這樣做:
fun addFruit() {
val list = ArrayList<String>()
list.add("蘋果")
list.add("西瓜")
list.add("橙子")
list.add("橘子")
list.add("葡萄")
list.add("香蕉")
}
Kotlin提供一個內置函數listof()來簡化初始化函數:
val list = listOf("蘋果", "西瓜", "橙子")
我們循環這個集合
fun addFruit() {
val list = listOf("蘋果", "西瓜", "橙子")
for (fruit in list) {
println(fruit)
}
}
需要注意的是,listof()創建的是一個不可變的集合,也就是說這個集合只能讀,不能寫
這麼設計的理由和val和類默認不可繼承是一個道理
如果我們想創建一個可變的函數,那麼使用mutableListOf()就可以了
fun addFruit() {
val list = mutableListOf("蘋果", "西瓜", "橙子")
list.add("香蕉")
for (fruit in list) {
println(fruit)
}
}
以上是List的用法,實際上Set的用法幾乎與此一模一樣,只是將創建集合的方式變成了setOf()和mutableSetof()而已
注意:Set集合底層是使用hash映射來存放數據的,因此元素無法保證有序,這是和List集合最大的不同
Map集合:Map是一種鍵值對形式的數據結構,因此在用法上和List、Set有較大不同.傳統的Map用法是先創建一個HashMap的實例,然後將一個個鍵值對數據添加到Map中:
val map = HashMap<String, String>()
map.put("aa", "aaa")
map.put("aa1", "aaa1")
map.put("aa2", "aaa2")
map.put("aa3", "aaa3")
這種寫法是和Java最相似的,但是Kotlin並不建議使用put()和get()方法來對Map進行添加和讀取數據操作,而是更推薦一種類似於數組下標的語法結構:
map["abb"] = "abb"
取值則:
val va = map["abb"]
當然,這仍然不是最簡便的寫法,Kotlin提供了mapOf()和mutableMapOf()函數來繼續簡化Map的用法.在mapOf()函數中,我們可以直接傳入初始化的鍵值對組合來完成對Map集合的創建:
val map = mapOf("ab" to "ab", "bc" to "aa")
這樣看上去好像是用to關鍵字來關聯的,但其實to不是一個關鍵字,而是一個infix函數,這點在後續會補充
val map = mapOf("ab" to "ab", "bc" to "aa")
for ((key, value) in map) {
println("name is $key, value is $value")
}
使用這種方法可以同時獲取鍵和值
歡迎關注這個不是技術號的公衆號,我們聊聊別的。