Kotlin学习路(一):集合使用
<本文學習郭神《第三行代碼》總結>
集合主要就是List、Set、Map,它們在Java中都有接口可以實現,
List --> ArrayList、LinkedList
Set --> HashSet
Map–> HashMap
1、List集合初始化
在Kotlin中初始化集合一般這樣做:
這種很繁瑣,所以這里將會介紹list的幾個方法:listof()、mutableListOf()
val list = listOf("aa", "bb") val list = mutableListOf("aa", "bb")listof():創建的是一個不可變的集合,該集合創建成功只能用于讀取數據,不能增刪改集合數據。
mutableListOf():創建的是一個可變的集合,可以進行增刪改查操作。
遍歷List集合需要使用for-in循環進行遍歷,比如:
2、Set集合
Set和List的用法其實一樣,在初始化時會用到這幾個方法:setof()、mutableSetOf()
setof():創建的是一個不可變的集合,該集合創建成功只能用于讀取數據,不能增刪改集合數據。
mutableSetOf():創建的是一個可變的集合,可以進行增刪改查操作。
在這里,Set集合List集合的區別需要注意的是,Set底層是使用Hash映射機制來存儲數據的,因此集合中的元素無法保證有序。
----遍歷和List一樣,就不做解釋了
3、Map集合初始化
Map集合這里重點介紹,Map和前兩者不同,Map是一種鍵值對形式的數據結構,因此在用法上和List、Set存在很大不同。
一般初始化Map時都需要創建一個HashMap
因為在Kotlin中,并不建議使用put()、get()方法對Map進行添加和讀取數據,而是使用這種類似下標的方式添加數據:
val map = HashMap<String, String>() map["aa"] = 1 map["bb"] = 2當讀取數據時
val text = map["aa"]然而,上面這種添加數據方式依然很繁瑣,和List、Set一樣,Map也有自己的方法mapof()、mutableMapOf()
val map1 = mapOf("aa" to 1, "bb" to 2) //不可變 val map2 = mutableMapOf("aa" to 1, "bb" to 2) //可變mapof():創建的是一個不可變的集合,該集合創建成功只能用于讀取數據,不能增刪改集合數據。
mutableMapOf():創建的是一個可變的集合,可以進行增刪改查操作。
遍歷Map集合,也是使用的for-in循環,唯一區別在于,for-in循環中,map鍵值對變量一起申明到了一對括號中
4、集合函數式API(lambda)
首先定義一個集合,然后找出里面長度最長的元素
傳統方式一般是這樣寫的,但是對于集合的函數式API,可以讓這個功能更簡介
val list1 = listOf("aa", "bbbb", "cc") var maxLength = list1.maxBy { it.length } print(maxLength)這就是函數API的用法,只是一行代碼就可以搞定。
接下來就看一下它的推導過程:
首先我們先了解一下lambda表達式結構:
最外面一個大括號,如果有參數值傳入表達式中,則需要申明參數,參數列表結尾 -> ,標識參數列表的結束以及函數體的開始,函數體中可編寫任意代碼。
現在回到前面,首先maxBy的工作原理是根據傳入的條件來進行遍歷,從而找打最大值,所以,套用Lambda函數表達式就可以寫成:
maxBy函數實質上是接收了一個lambda參數,
其次,在開發中不需要特地定義一個lambda變量,可以直接將lambda表達式傳入maxBy函數中,
在Kotlin規定中,當Lambda參數是函數的最后一個參數時,可以將Lambda表達式移到括號外,
val list1 = listOf("aa", "bbbb", "cc") var maxLength = list1.maxBy() { content :String -> content.length } print(maxLength)如果Lambda參數時函數唯一一個參數時,可以將括號省略,
val list1 = listOf("aa", "bbbb", "cc") var maxLength = list1.maxBy { content :String -> content.length } print(maxLength)由于Kotlin中的類型推導機制,Lambda表達式在大多數情況下不必申明參數類型,
val list1 = listOf("aa", "bbbb", "cc") var maxLength = list1.maxBy { content -> content.length } print(maxLength)最后,當Lambda表達式的參數列表中只有一個參數時,也不必申明參數名,可以直接使用關鍵字 it 代替,
val list1 = listOf("aa", "bbbb", "cc") var maxLength = list1.maxBy { it.length } print(maxLength)5、常用的集合函數式API
(1)、map()函數
它用于將每個元素都映射成一個另外的值,映射規則在Lambda表達式中指定,最終生成一個新的集合,
(2)、filter()函數
用于過濾集合中的數據,可以單獨使用,也可以和map()一起使用
(3)、any()函數
判斷集合中是否至少存在一個元素滿足指定條件
(4)、all()函數
判斷集合中是否所有元素都滿足指定條件
總結
以上是生活随笔為你收集整理的Kotlin学习路(一):集合使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ssas连接oracle性能,Analy
- 下一篇: RDL 报表 - 制作双坐标轴图表