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

一:變量的定義

  • var變量variable

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

    • 不可變變量:賦值之后不可直接修改良拼,但是對應(yīng)的get方法還是可以修改僵驰,類似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是不能修改值的但是可以通過toMutableMap轉(zhuǎn)成新的集合骡显,該方法返回的是一個新的map
    //原始的map還是不可變的疆栏,對map的操作需要在toMutableMap的返回map上進行操作
    var map: Map<String, Int> = mapOf("1" to 1,"2" to 2)
    //使用mutableMapOf創(chuàng)建的map可以進行值的修改
    var mutableMap: Map<String, Int> = mutableMapOf("a" to 1)
    //將普通不可修改的map轉(zhuǎn)為可修改的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) : 獲取對應(yīng)下標(biāo)的元素若专。若下標(biāo)越界险污,會拋出IndexOutOfBoundsException(下標(biāo)越界)異常,同get(index)一樣
  • elementAtOrElse(index,{...}) : 獲取對應(yīng)下標(biāo)的元素富岳。若下標(biāo)越界蛔糯,返回默認值,此默認值就是你傳入的下標(biāo)的運算值
  • elementAtOrNull(index) : 獲取對應(yīng)下標(biāo)的元素窖式。若下標(biāo)越界蚁飒,返回null
  • first() : 獲取第一個元素,若集合為空集合萝喘,這會拋出NoSuchElementException異常
  • first{} : 獲取指定元素的第一個元素淮逻。若不滿足條件,則拋出NoSuchElementException異常
  • firstOrNull() : 獲取第一個元素阁簸,若集合為空集合爬早,返回null
  • firstOrNull{} : 獲取指定元素的第一個元素。若不滿足條件启妹,返回null
  • getOrElse(index,{...}) : 同elementAtOrElse一樣
  • getOrNull(index) : 同elementAtOrNull一樣
  • last() : 同first()相反
  • last{} : 同first{}相反
  • lastOrNull{} : 同firstOrNull()相反
  • lastOrNull() : 同firstOrNull{}相反
  • indexOf(元素) : 返回指定元素的下標(biāo)筛严,若不存在,則返回-1
  • indexOfFirst{...} : 返回第一個滿足條件元素的下標(biāo)饶米,若不存在桨啃,則返回-1
  • indexOfLast{...} : 返回最后一個滿足條件元素的下標(biāo),若不存在檬输,則返回-1
  • single() : 若集合的長度等于0,則拋出NoSuchElementException異常照瘾,若等于1,則返回第一個元素丧慈。反之析命,則拋出IllegalArgumentException異常
  • single{} : 找到集合中滿足條件的元素,若元素滿足條件逃默,則返回該元素鹃愤。否則會根據(jù)不同的條件,拋出異常笑旺。這個方法慎用
  • singleOrNull() : 若集合的長度等于1,則返回第一個元素昼浦。否則,返回null
  • singleOrNull{} : 找到集合中滿足條件的元素筒主,若元素滿足條件关噪,則返回該元素。否則返回null
  • forEach{...} : 遍歷元素乌妙。一般用作元素的打印
  • forEachIndexed{index,value} : 遍歷元素使兔,可獲得集合中元素的下標(biāo)。一般用作元素以及下標(biāo)的打印
  • componentX() : 這個函數(shù)在前面的章節(jié)中提過多次了藤韵。用于獲取元素虐沥。其中的X只能代表1..5。詳情可看下面的例子
    • println(list.component1()) // 等價于list[0] <=> list.get(0)

2.2 順序操作符

  • reversed() : 反序泽艘。即和初始化的順序反過來欲险。
  • sorted() : 自然升序。
  • sortedBy{} : 根據(jù)條件升序匹涮,即把不滿足條件的放在前面天试,滿足條件的放在后面
  • sortedDescending() : 自然降序。
  • sortedByDescending{} : 根據(jù)條件降序然低。和sortedBy{}相反

2.3 映射操作符

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

2.4 過濾操作符

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

2.5 生產(chǎn)操作符

  • plus() : 合并兩個集合中的元素,組成一個新的集合划纽。也可以使用符號+
  • zip : 由兩個集合按照相同的下標(biāo)組成一個新集合脆侮。該新集合的類型是:List<Pair>
  • unzip : 和zip的作用相反。把一個類型為List<Pair>的集合拆分為兩個集合勇劣【副埽看下面的例子
  • partition : 判斷元素是否滿足條件把集合拆分為有兩個Pair組成的新集合。

2.6 統(tǒng)計操作符

  • any() : 判斷是不是一個集合比默,若是幻捏,則在判斷集合是否為空,若為空則返回false,反之返回true,若不是集合命咐,則返回hasNext
  • any{...} : 判斷集合中是否存在滿足條件的元素篡九。若存在則返回true,反之返回false
  • all{...} : 判斷集合中的所有元素是否都滿足條件。若是則返回true,反之則返回false
  • none() : 和any()函數(shù)的作用相反
  • none{...} : 和all{...}函數(shù)的作用相反
  • max() : 獲取集合中最大的元素侈百,若為空元素集合瓮下,則返回null
  • maxBy{...} : 獲取方法處理后返回結(jié)果最大值對應(yīng)那個元素的初始值,如果沒有則返回null
  • min() : 獲取集合中最小的元素钝域,若為空元素集合讽坏,則返回null![collection.jpg](https://upload-
  • minBy{...} : 獲取方法處理后返回結(jié)果最小值對應(yīng)那個元素的初始值,如果沒有則返回null
  • sum() : 計算出集合元素累加的結(jié)果例证。
  • sumBy{...} : 根據(jù)元素運算操作后的結(jié)果路呜,然后根據(jù)這個結(jié)果計算出累加的值。
  • sumByDouble{...} : 和sumBy{}相似织咧,不過sumBy{}是操作Int類型數(shù)據(jù)伐割,而sumByDouble{}操作的是Double類型數(shù)據(jù)
  • average() : 獲取平均數(shù)
  • reduce{...} : 從集合中的第一項到最后一項的累計操作痘括。
  • reduceIndexed{...} : 和reduce{}作用相同,只是其可以操作元素的下標(biāo)(index)
  • reduceRight{...} : 從集合中的最后一項到第一項的累計操作。
  • reduceRightIndexed{...} : 和reduceRight{}作用相同粱玲,只是其可以操作元素的下標(biāo)(index)
  • fold{...} : 和reduce{}類似上忍,但是fold{}有一個初始值
  • foldIndexed{...} : 和reduceIndexed{}類似怒见,但是foldIndexed{}有一個初始值
  • foldRight{...} : 和reduceRight{}類似杆查,但是foldRight{}有一個初始值
  • foldRightIndexed{...} : 和reduceRightIndexed{}類似,但是foldRightIndexed{}有一個初始值


    collection.jpg
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末艇搀,一起剝皮案震驚了整個濱河市尿扯,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌焰雕,老刑警劉巖衷笋,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異矩屁,居然都是意外死亡辟宗,警方通過查閱死者的電腦和手機爵赵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來慢蜓,“玉大人亚再,你說我怎么就攤上這事郭膛〕柯眨” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵则剃,是天一觀的道長耘柱。 經(jīng)常有香客問我,道長棍现,這世上最難降的妖魔是什么调煎? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮己肮,結(jié)果婚禮上士袄,老公的妹妹穿的比我還像新娘。我一直安慰自己谎僻,他們只是感情好娄柳,可當(dāng)我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著艘绍,像睡著了一般赤拒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上诱鞠,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天挎挖,我揣著相機與錄音,去河邊找鬼航夺。 笑死蕉朵,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的阳掐。 我是一名探鬼主播始衅,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼锚烦!你這毒婦竟也來了觅闽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤涮俄,失蹤者是張志新(化名)和其女友劉穎蛉拙,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體彻亲,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡孕锄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年吮廉,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片畸肆。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡宦芦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出轴脐,到底是詐尸還是另有隱情调卑,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布大咱,位于F島的核電站恬涧,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏碴巾。R本人自食惡果不足惜溯捆,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望厦瓢。 院中可真熱鬧提揍,春花似錦、人聲如沸煮仇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽欺抗。三九已至售碳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間绞呈,已是汗流浹背贸人。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留佃声,地道東北人艺智。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像圾亏,于是被迫代替她去往敵國和親十拣。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,792評論 2 345