Kotlin-變量、數組和集合

一:變量的定義

  • 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)

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![collection.jpg](https://upload-
  • minBy{...} : 獲取方法處理后返回結果最小值對應那個元素的初始值,如果沒有則返回null
  • sum() : 計算出集合元素累加的結果。
  • 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
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,461評論 6 532
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,538評論 3 417
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,423評論 0 375
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,991評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,761評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,207評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,268評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,419評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,959評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,782評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,983評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,528評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,222評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,653評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,901評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,678評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,978評論 2 374