Kotlin-變量、數(shù)組和集合

一:變量的定義

  • var變量variable

    • 可變變量:賦值之后可以多次修改
  • val常量value

    • 不可變變量:賦值之后不可直接修改,但是對(duì)應(yīng)的get方法還是可以修改,類(lèi)似java中被final修飾的常量

二:數(shù)組與集合

1、數(shù)組與集合的創(chuàng)建

    var array: Array<Int> = arrayOf(1, 2)
    //這種方法數(shù)組元素免于裝箱,不需要轉(zhuǎn)為Integer,可以節(jié)省內(nèi)存
    var arr: IntArray = intArrayOf(1,2)
    var list:List<String> = listOf("a","b")
    var set1: Set<String> = setOf("1", "2")
    //使用to將鍵和值關(guān)聯(lián)    直接使用mapOf創(chuàng)建的map是不能修改值的但是可以通過(guò)toMutableMap轉(zhuǎn)成新的集合,該方法返回的是一個(gè)新的map
    //原始的map還是不可變的,對(duì)map的操作需要在toMutableMap的返回map上進(jìn)行操作
    var map: Map<String, Int> = mapOf("1" to 1,"2" to 2)
    //使用mutableMapOf創(chuàng)建的map可以進(jìn)行值的修改
    var mutableMap: Map<String, Int> = mutableMapOf("a" to 1)
    //將普通不可修改的map轉(zhuǎn)為可修改的map
    var map1 = map.toMutableMap()

2、集合常見(jiàn)操作符

  • forEach:遍歷
    • arr1.forEach { println(it) }
  • map:對(duì)集合元素進(jìn)行指定操作,返回一個(gè)新的集合
    • var newList = list.map { i -> i+3 }
  • flatMap:每一步生成新的集合,最后將所有集合連接起來(lái)生成新的集合
    • var flatMapList = arr1.flatMap { i -> listOf("${i + 1}", "a") // ??生成新集合}
  • contains(元素) : 檢查集合中是否包含指定的元素,若存在則返回true,反之返回false

2.1 元素操作符

  • elementAt(index) : 獲取對(duì)應(yīng)下標(biāo)的元素。若下標(biāo)越界,會(huì)拋出IndexOutOfBoundsException(下標(biāo)越界)異常,同get(index)一樣
  • elementAtOrElse(index,{...}) : 獲取對(duì)應(yīng)下標(biāo)的元素。若下標(biāo)越界,返回默認(rèn)值,此默認(rèn)值就是你傳入的下標(biāo)的運(yùn)算值
  • elementAtOrNull(index) : 獲取對(duì)應(yīng)下標(biāo)的元素。若下標(biāo)越界,返回null
  • first() : 獲取第一個(gè)元素,若集合為空集合,這會(huì)拋出NoSuchElementException異常
  • first{} : 獲取指定元素的第一個(gè)元素。若不滿(mǎn)足條件,則拋出NoSuchElementException異常
  • firstOrNull() : 獲取第一個(gè)元素,若集合為空集合,返回null
  • firstOrNull{} : 獲取指定元素的第一個(gè)元素。若不滿(mǎn)足條件,返回null
  • getOrElse(index,{...}) : 同elementAtOrElse一樣
  • getOrNull(index) : 同elementAtOrNull一樣
  • last() : 同first()相反
  • last{} : 同first{}相反
  • lastOrNull{} : 同firstOrNull()相反
  • lastOrNull() : 同firstOrNull{}相反
  • indexOf(元素) : 返回指定元素的下標(biāo),若不存在,則返回-1
  • indexOfFirst{...} : 返回第一個(gè)滿(mǎn)足條件元素的下標(biāo),若不存在,則返回-1
  • indexOfLast{...} : 返回最后一個(gè)滿(mǎn)足條件元素的下標(biāo),若不存在,則返回-1
  • single() : 若集合的長(zhǎng)度等于0,則拋出NoSuchElementException異常,若等于1,則返回第一個(gè)元素。反之,則拋出IllegalArgumentException異常
  • single{} : 找到集合中滿(mǎn)足條件的元素,若元素滿(mǎn)足條件,則返回該元素。否則會(huì)根據(jù)不同的條件,拋出異常。這個(gè)方法慎用
  • singleOrNull() : 若集合的長(zhǎng)度等于1,則返回第一個(gè)元素。否則,返回null
  • singleOrNull{} : 找到集合中滿(mǎn)足條件的元素,若元素滿(mǎn)足條件,則返回該元素。否則返回null
  • forEach{...} : 遍歷元素。一般用作元素的打印
  • forEachIndexed{index,value} : 遍歷元素,可獲得集合中元素的下標(biāo)。一般用作元素以及下標(biāo)的打印
  • componentX() : 這個(gè)函數(shù)在前面的章節(jié)中提過(guò)多次了。用于獲取元素。其中的X只能代表1..5。詳情可看下面的例子
    • println(list.component1()) // 等價(jià)于list[0] <=> list.get(0)

2.2 順序操作符

  • reversed() : 反序。即和初始化的順序反過(guò)來(lái)。
  • sorted() : 自然升序。
  • sortedBy{} : 根據(jù)條件升序,即把不滿(mǎn)足條件的放在前面,滿(mǎn)足條件的放在后面
  • sortedDescending() : 自然降序。
  • sortedByDescending{} : 根據(jù)條件降序。和sortedBy{}相反

2.3 映射操作符

  • map{...} : 把每個(gè)元素按照特定的方法進(jìn)行轉(zhuǎn)換,組成一個(gè)新的集合。
  • mapNotNull{...} : 同map{}函數(shù)的作用相同,只是過(guò)濾掉轉(zhuǎn)換之后為null的元素
  • mapIndexed{index,result} : 把每個(gè)元素按照特定的方法進(jìn)行轉(zhuǎn)換,只是其可以操作元素的下標(biāo)(index),組成一個(gè)新的集合。
  • mapIndexedNotNull{index,result} : 同mapIndexed{}函數(shù)的作用相同,只是過(guò)濾掉轉(zhuǎn)換之后為null的元素
  • flatMap{...} : 根據(jù)條件合并兩個(gè)集合,組成一個(gè)新的集合。
  • groupBy{...} : 分組。即根據(jù)條件把集合拆分為為一個(gè)Map<K,List<T>>類(lèi)型的集合。具體看實(shí)例

2.4 過(guò)濾操作符

  • filter{...} : 把不滿(mǎn)足條件的元素過(guò)濾掉
  • filterIndexed{...} : 和filter{}函數(shù)作用類(lèi)似,只是可以操作集合中元素的下標(biāo)(index)
  • filterNot{...} : 和filter{}函數(shù)的作用相反
  • filterNotNull() : 過(guò)濾掉集合中為null的元素。
  • take(num) : 返回集合中前num個(gè)元素組成的集合
  • takeWhile{...} : 循環(huán)遍歷集合,從第一個(gè)元素開(kāi)始遍歷集合,當(dāng)?shù)谝粋€(gè)出現(xiàn)不滿(mǎn)足條件元素的時(shí)候,退出遍歷。然后把滿(mǎn)足條件所有元素組成的集合返回。
  • takeLast(num) : 返回集合中后num個(gè)元素組成的集合
  • takeLastWhile{...} : 循環(huán)遍歷集合,從最后一個(gè)元素開(kāi)始遍歷集合,當(dāng)?shù)谝粋€(gè)出現(xiàn)不滿(mǎn)足條件元素的時(shí)候,退出遍歷。然后把滿(mǎn)足條件所有元素組成的集合返回。
  • drop(num) : 過(guò)濾集合中前num個(gè)元素
  • dropWhile{...} : 相同條件下,和執(zhí)行takeWhile{...}函數(shù)后得到的結(jié)果相反
  • dropLast(num) : 過(guò)濾集合中后num個(gè)元素
  • dropLastWhile{...} : 相同條件下,和執(zhí)行takeLastWhile{...}函數(shù)后得到的結(jié)果相反
  • distinct() : 去除重復(fù)元素
    • println(list3.distinct())
  • distinctBy{...} : 根據(jù)操作元素后的結(jié)果去除重復(fù)元素
    • println(list3.distinctBy { it + 2 })
  • slice : 過(guò)濾掉所有不滿(mǎn)足執(zhí)行下標(biāo)的元素。
    • println(list1.slice(listOf(1,3,5,7)))

2.5 生產(chǎn)操作符

  • plus() : 合并兩個(gè)集合中的元素,組成一個(gè)新的集合。也可以使用符號(hào)+
  • zip : 由兩個(gè)集合按照相同的下標(biāo)組成一個(gè)新集合。該新集合的類(lèi)型是:List<Pair>
  • unzip : 和zip的作用相反。把一個(gè)類(lèi)型為L(zhǎng)ist<Pair>的集合拆分為兩個(gè)集合??聪旅娴睦?/li>
  • partition : 判斷元素是否滿(mǎn)足條件把集合拆分為有兩個(gè)Pair組成的新集合。

2.6 統(tǒng)計(jì)操作符

  • any() : 判斷是不是一個(gè)集合,若是,則在判斷集合是否為空,若為空則返回false,反之返回true,若不是集合,則返回hasNext
  • any{...} : 判斷集合中是否存在滿(mǎn)足條件的元素。若存在則返回true,反之返回false
  • all{...} : 判斷集合中的所有元素是否都滿(mǎn)足條件。若是則返回true,反之則返回false
  • none() : 和any()函數(shù)的作用相反
  • none{...} : 和all{...}函數(shù)的作用相反
  • max() : 獲取集合中最大的元素,若為空元素集合,則返回null
  • maxBy{...} : 獲取方法處理后返回結(jié)果最大值對(duì)應(yīng)那個(gè)元素的初始值,如果沒(méi)有則返回null
  • min() : 獲取集合中最小的元素,若為空元素集合,則返回null![collection.jpg](https://upload-
  • minBy{...} : 獲取方法處理后返回結(jié)果最小值對(duì)應(yīng)那個(gè)元素的初始值,如果沒(méi)有則返回null
  • sum() : 計(jì)算出集合元素累加的結(jié)果。
  • sumBy{...} : 根據(jù)元素運(yùn)算操作后的結(jié)果,然后根據(jù)這個(gè)結(jié)果計(jì)算出累加的值。
  • sumByDouble{...} : 和sumBy{}相似,不過(guò)sumBy{}是操作Int類(lèi)型數(shù)據(jù),而sumByDouble{}操作的是Double類(lèi)型數(shù)據(jù)
  • average() : 獲取平均數(shù)
  • reduce{...} : 從集合中的第一項(xiàng)到最后一項(xiàng)的累計(jì)操作。
  • reduceIndexed{...} : 和reduce{}作用相同,只是其可以操作元素的下標(biāo)(index)
  • reduceRight{...} : 從集合中的最后一項(xiàng)到第一項(xiàng)的累計(jì)操作。
  • reduceRightIndexed{...} : 和reduceRight{}作用相同,只是其可以操作元素的下標(biāo)(index)
  • fold{...} : 和reduce{}類(lèi)似,但是fold{}有一個(gè)初始值
  • foldIndexed{...} : 和reduceIndexed{}類(lèi)似,但是foldIndexed{}有一個(gè)初始值
  • foldRight{...} : 和reduceRight{}類(lèi)似,但是foldRight{}有一個(gè)初始值
  • foldRightIndexed{...} : 和reduceRightIndexed{}類(lèi)似,但是foldRightIndexed{}有一個(gè)初始值


    collection.jpg
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容