一:變量的定義
-
var變量variable
- 可變變量:賦值之后可以多次修改
-
val常量value
- 不可變變量:賦值之后不可直接修改,但是對應的get方法還是可以修改,類似java中被final修飾的常量
二:數組與集合
1、數組與集合的創建
var array: Array<Int> = arrayOf(1, 2)
//這種方法數組元素免于裝箱,不需要轉為Integer,可以節省內存
var arr: IntArray = intArrayOf(1,2)
var list:List<String> = listOf("a","b")
var set1: Set<String> = setOf("1", "2")
//使用to將鍵和值關聯 直接使用mapOf創建的map是不能修改值的但是可以通過toMutableMap轉成新的集合,該方法返回的是一個新的map
//原始的map還是不可變的,對map的操作需要在toMutableMap的返回map上進行操作
var map: Map<String, Int> = mapOf("1" to 1,"2" to 2)
//使用mutableMapOf創建的map可以進行值的修改
var mutableMap: Map<String, Int> = mutableMapOf("a" to 1)
//將普通不可修改的map轉為可修改的map
var map1 = map.toMutableMap()
2、集合常見操作符
- forEach:遍歷
- arr1.forEach { println(it) }
- map:對集合元素進行指定操作,返回一個新的集合
- var newList = list.map { i -> i+3 }
- flatMap:每一步生成新的集合,最后將所有集合連接起來生成新的集合
- var flatMapList = arr1.flatMap { i -> listOf("${i + 1}", "a") // ??生成新集合}
- contains(元素) : 檢查集合中是否包含指定的元素,若存在則返回true,反之返回false
2.1 元素操作符
- elementAt(index) : 獲取對應下標的元素。若下標越界,會拋出IndexOutOfBoundsException(下標越界)異常,同get(index)一樣
- elementAtOrElse(index,{...}) : 獲取對應下標的元素。若下標越界,返回默認值,此默認值就是你傳入的下標的運算值
- elementAtOrNull(index) : 獲取對應下標的元素。若下標越界,返回null
- first() : 獲取第一個元素,若集合為空集合,這會拋出NoSuchElementException異常
- first{} : 獲取指定元素的第一個元素。若不滿足條件,則拋出NoSuchElementException異常
- firstOrNull() : 獲取第一個元素,若集合為空集合,返回null
- firstOrNull{} : 獲取指定元素的第一個元素。若不滿足條件,返回null
- getOrElse(index,{...}) : 同elementAtOrElse一樣
- getOrNull(index) : 同elementAtOrNull一樣
- last() : 同first()相反
- last{} : 同first{}相反
- lastOrNull{} : 同firstOrNull()相反
- lastOrNull() : 同firstOrNull{}相反
- indexOf(元素) : 返回指定元素的下標,若不存在,則返回-1
- indexOfFirst{...} : 返回第一個滿足條件元素的下標,若不存在,則返回-1
- indexOfLast{...} : 返回最后一個滿足條件元素的下標,若不存在,則返回-1
- single() : 若集合的長度等于0,則拋出NoSuchElementException異常,若等于1,則返回第一個元素。反之,則拋出IllegalArgumentException異常
- single{} : 找到集合中滿足條件的元素,若元素滿足條件,則返回該元素。否則會根據不同的條件,拋出異常。這個方法慎用
- singleOrNull() : 若集合的長度等于1,則返回第一個元素。否則,返回null
- singleOrNull{} : 找到集合中滿足條件的元素,若元素滿足條件,則返回該元素。否則返回null
- forEach{...} : 遍歷元素。一般用作元素的打印
- forEachIndexed{index,value} : 遍歷元素,可獲得集合中元素的下標。一般用作元素以及下標的打印
- componentX() : 這個函數在前面的章節中提過多次了。用于獲取元素。其中的X只能代表1..5。詳情可看下面的例子
- println(list.component1()) // 等價于
list[0] <=> list.get(0)
- println(list.component1()) // 等價于
2.2 順序操作符
- reversed() : 反序。即和初始化的順序反過來。
- sorted() : 自然升序。
- sortedBy{} : 根據條件升序,即把不滿足條件的放在前面,滿足條件的放在后面
- sortedDescending() : 自然降序。
- sortedByDescending{} : 根據條件降序。和sortedBy{}相反
2.3 映射操作符
- map{...} : 把每個元素按照特定的方法進行轉換,組成一個新的集合。
- mapNotNull{...} : 同map{}函數的作用相同,只是過濾掉轉換之后為null的元素
- mapIndexed{index,result} : 把每個元素按照特定的方法進行轉換,只是其可以操作元素的下標(index),組成一個新的集合。
- mapIndexedNotNull{index,result} : 同mapIndexed{}函數的作用相同,只是過濾掉轉換之后為null的元素
- flatMap{...} : 根據條件合并兩個集合,組成一個新的集合。
- groupBy{...} : 分組。即根據條件把集合拆分為為一個Map<K,List<T>>類型的集合。具體看實例
2.4 過濾操作符
- filter{...} : 把不滿足條件的元素過濾掉
- filterIndexed{...} : 和filter{}函數作用類似,只是可以操作集合中元素的下標(index)
- filterNot{...} : 和filter{}函數的作用相反
- filterNotNull() : 過濾掉集合中為null的元素。
- take(num) : 返回集合中前num個元素組成的集合
- takeWhile{...} : 循環遍歷集合,從第一個元素開始遍歷集合,當第一個出現不滿足條件元素的時候,退出遍歷。然后把滿足條件所有元素組成的集合返回。
- takeLast(num) : 返回集合中后num個元素組成的集合
- takeLastWhile{...} : 循環遍歷集合,從最后一個元素開始遍歷集合,當第一個出現不滿足條件元素的時候,退出遍歷。然后把滿足條件所有元素組成的集合返回。
- drop(num) : 過濾集合中前num個元素
- dropWhile{...} : 相同條件下,和執行takeWhile{...}函數后得到的結果相反
- dropLast(num) : 過濾集合中后num個元素
- dropLastWhile{...} : 相同條件下,和執行takeLastWhile{...}函數后得到的結果相反
- distinct() : 去除重復元素
- println(list3.distinct())
- distinctBy{...} : 根據操作元素后的結果去除重復元素
- println(list3.distinctBy { it + 2 })
- slice : 過濾掉所有不滿足執行下標的元素。
- println(list1.slice(listOf(1,3,5,7)))
2.5 生產操作符
- plus() : 合并兩個集合中的元素,組成一個新的集合。也可以使用符號+
- zip : 由兩個集合按照相同的下標組成一個新集合。該新集合的類型是:List<Pair>
- unzip : 和zip的作用相反。把一個類型為List<Pair>的集合拆分為兩個集合。看下面的例子
- partition : 判斷元素是否滿足條件把集合拆分為有兩個Pair組成的新集合。
2.6 統計操作符
- any() : 判斷是不是一個集合,若是,則在判斷集合是否為空,若為空則返回false,反之返回true,若不是集合,則返回hasNext
- any{...} : 判斷集合中是否存在滿足條件的元素。若存在則返回true,反之返回false
- all{...} : 判斷集合中的所有元素是否都滿足條件。若是則返回true,反之則返回false
- none() : 和any()函數的作用相反
- none{...} : 和all{...}函數的作用相反
- max() : 獲取集合中最大的元素,若為空元素集合,則返回null
- maxBy{...} : 獲取方法處理后返回結果最大值對應那個元素的初始值,如果沒有則返回null
- min() : 獲取集合中最小的元素,若為空元素集合,則返回null : 計算出集合元素累加的結果。
- sumBy{...} : 根據元素運算操作后的結果,然后根據這個結果計算出累加的值。
- sumByDouble{...} : 和sumBy{}相似,不過sumBy{}是操作Int類型數據,而sumByDouble{}操作的是Double類型數據
- average() : 獲取平均數
- reduce{...} : 從集合中的第一項到最后一項的累計操作。
- reduceIndexed{...} : 和reduce{}作用相同,只是其可以操作元素的下標(index)
- reduceRight{...} : 從集合中的最后一項到第一項的累計操作。
- reduceRightIndexed{...} : 和reduceRight{}作用相同,只是其可以操作元素的下標(index)
- fold{...} : 和reduce{}類似,但是fold{}有一個初始值
- foldIndexed{...} : 和reduceIndexed{}類似,但是foldIndexed{}有一個初始值
- foldRight{...} : 和reduceRight{}類似,但是foldRight{}有一個初始值
-
foldRightIndexed{...} : 和reduceRightIndexed{}類似,但是foldRightIndexed{}有一個初始值
collection.jpg