筆記:kotlin 學習第五天

  1. List集合

    /**
     * @ 文件名:   `01.List集合`
     * @ 創建者:   ty
     * @ 時間:    2018/7/24 14:14
     * @ 描述:     定義三種方式的集合(listOf、mutableList、Java中的list集合)
     */
    
    fun main(args: Array<String>) {
        //定義簡單集合
        val listOf = listOf("林青霞", "張曼玉", "王祖賢", "李冰冰", "林志玲")
        println(listOf)
    
        //定義可變的集合
        val mutableListOf = mutableListOf("林青霞", "張曼玉", "王祖賢", "李冰冰", "林志玲")
        mutableListOf.add("張國榮")
        mutableListOf.add("林志穎")
        println(mutableListOf)
    
        //定義Java集合
        val arrayList = ArrayList<String>()
        arrayList.add("李冰冰")
        arrayList.add("范冰冰")
        arrayList.add("張馨予")
        arrayList.add("張馨予")
        println(arrayList)
    }
    
  1. List集合的遍歷

    /**
     * @ 文件名:   `02.List集合的遍歷`
     * @ 創建者:   ty
     * @ 時間:    2018/7/24 14:15
     * @ 描述:    for foreach
     */
    fun main(args: Array<String>) {
    //對List三種定義方式分別遍歷
        //定義簡單集合
        val listOf = listOf("林青霞", "張曼玉", "王祖賢", "李冰冰", "林志玲")
        for (s in listOf) {
            println(s)
        }
    
        //定義可變的集合
        val mutableListOf = mutableListOf("林青霞", "張曼玉", "王祖賢", "李冰冰", "林志玲")
        mutableListOf.add("張國榮")
        mutableListOf.add("林志穎")
        mutableListOf.forEach {
            println(it)
        }
    
        //定義Java集合
        val arrayList = ArrayList<String>()
        arrayList.add("李冰冰")
        arrayList.add("范冰冰")
        arrayList.add("張馨予")
        arrayList.add("張馨予")
        arrayList.forEachIndexed { index, s ->
            println("index: $index + s: $s")
        }
    }
    
  1. Set集合

    /**
     * @ 文件名:   `03.Set集合`
     * @ 創建者:   ty
     * @ 時間:    2018/7/24 14:16
     * @ 描述:    定義三種方式的集合(setOf、mutable、Java中的set集合)
     */
    fun main(args: Array<String>) {
        //不可變
        val set = setOf("林青霞", "張曼玉", "王祖賢", "李冰冰", "林志玲","王祖賢")
        println(set)
    
        val mutableListOf = mutableListOf("王祖賢","林青霞", "張曼玉", "王祖賢", "李冰冰", "林志玲")
        println(mutableListOf)
    
    
        val hashSet = HashSet<String>()
        hashSet.add("林志穎")
        hashSet.add("張國榮")
        hashSet.add("張國榮")
        println(hashSet)
    
        val hashSetOf = hashSetOf<String>()
        hashSetOf.add("劉德華")
        hashSetOf.add("劉德華")
        hashSetOf.add("洪金寶")
        println(hashSetOf)
    }
    
  1. Set集合的遍歷

    /**
     * @ 文件名:   `04.Set集合的遍歷`
     * @ 創建者:   ty
     * @ 時間:    2018/7/24 14:18
     * @ 描述:    遍歷set集合
     */
    fun main(args: Array<String>) {
        val set = setOf("林青霞", "張曼玉", "林志玲", "王祖賢", "李冰冰", "林志玲")
        for (s in set) {
            println(s)
        }
        val mutableListOf = mutableListOf("林青霞", "張曼玉", "王祖賢", "張曼玉", "李冰冰", "林志玲")
        mutableListOf.forEach {
            println(it)
        }
    
        val hashSetOf = hashSetOf<String>()
        hashSetOf.add("劉德華")
        hashSetOf.add("洪金寶")
        hashSetOf.add("洪金寶")
        hashSetOf.forEachIndexed { index, s ->
            println("index: $index  + s: $s")
        }
    }
    
  1. Map集合

    /**
     * @ 文件名:   `05.map集合`
     * @ 創建者:   ty
     * @ 時間:    2018/7/24 14:18
     * @ 描述:     定義三種方式的集合(mapOf、mutableMap、Java中的map集合)
     */
    fun main(args: Array<String>) {
        val mapOf = mapOf(Pair("林青霞", 50), Pair("張曼玉", 40), Pair("林志玲", 30), Pair("林志穎", 18))
        println(mapOf)
    
        val mutableMapOf = mutableMapOf(Pair("林青霞", 50), Pair("張曼玉", 40), Pair("林志玲", 30), Pair("林志穎", 18))
        mutableMapOf.put("范冰冰", 24)
        mutableMapOf["李冰冰"] = 28
        println(mutableMapOf)
    
    
        val hashMapOf = hashMapOf<String, Int>()
        //val hashMap = HashMap<String, Int>()
        hashMapOf.put("洪金寶", 44)
        hashMapOf["成龍"] = 55
        println(hashMapOf)
    }
    
  1. Map集合的遍歷

    /**
     * @ 文件名:   `06.Map集合的遍歷`
     * @ 創建者:   ty
     * @ 時間:    2018/7/24 14:19
     * @ 描述:
     */
    fun main(args: Array<String>) {
        val mapOf = mapOf(Pair("林青霞", 50), Pair("張曼玉", 40), Pair("林志玲", 30), Pair("林志穎", 18))
        for (key in mapOf.keys) {
            println(key)
        }
    
        mapOf.values.forEach {
            println(it)
        }
    
        val mutableMapOf = mutableMapOf(Pair("林青霞", 50), Pair("張曼玉", 40), Pair("林志玲", 30), Pair("林志穎", 18))
        mutableMapOf.put("范冰冰", 24)
        mutableMapOf["李冰冰"] = 28
        mutableMapOf.forEach { t, u ->
            println("key: $t + value: +$u")
        }
    
        val hashMapOf = hashMapOf<String, Int>()
        //val hashMap = HashMap<String, Int>()
        hashMapOf.put("洪金寶", 44)
        hashMapOf["成龍"] = 55
        hashMapOf.forEach {
            println("key: ${it.key} + value: +${it.value}")
        }
    }
    
  1. 閉包

    /**
     * @ 文件名:   `07.閉包`
     * @ 創建者:   ty
     * @ 時間:    2018/7/24 14:19
     * @ 描述:    lambada表達式 函數不保存狀態,閉包可以讓函數攜帶狀態
     */
    fun main(args: Array<String>) {
    
        val test = test()
        test()//120
        test()//121
        test()//122
    
    }
    
    fun test(): () -> Unit {
        var a = 120
        return {
            println("測試+$a")
            a++
        }
    }
    
  1. 高階函數

    /**
     * @ 文件名:   `08.高階函數`
     * @ 創建者:   ty
     * @ 時間:    2018/7/24 14:20
     * @ 描述:    定義一個工具函數calc 求兩個數的和  求兩個數的差
     * 函數類型的參數: block(a:Int,b:Int)->Int
     */
    fun main(args: Array<String>) {
        val calc = calc(10, 20, ::add)
        println(calc)
        val calc1 = calc(10, 20, ::sub)
        println(calc1)
    }
    
    /**
     * a:傳遞的第一個數據
     * b:傳遞的第二個數據
     * block:傳遞的工具  ::add  ::sub
     * 返回值:使用工具求出的值
     */
    fun calc(a: Int, b: Int, block: (a: Int, b: Int) -> Int): Int {
        return block.invoke(a, b)
    }
    
    fun add(a: Int, b: Int): Int {
        return a + b
    }
    
    fun sub(a: Int, b: Int): Int {
        return a - b
    }
    
  1. Lambda表達式

    /**
     * @ 文件名:   `09.Lambda表達式`
     * @ 創建者:   ty
     * @ 時間:    2018/7/24 14:22
     * @ 描述:   匿名函數 -> {}
     */
    fun main(args: Array<String>) {
        val calc = calc(19, 23, { a, b ->
            a + b
        })
    
        println(calc)
    }
    
    fun calc(a: Int, b: Int, block: (a: Int, b: Int) -> Int): Int {
        return block(a, b)
    }
    
  1. Lambda表達式去掉()

    /**
     * @ 文件名:   `10.Lambda表達式去掉()`
     * @ 創建者:   ty
     * @ 時間:    2018/7/24 14:23
     * @ 描述:    去掉參數()
     */
    
    fun main(args: Array<String>) {
        val calc = calc(24, 34) { m, n ->
            m + n
        }
        println(calc)
    }
    
    fun calc(a: Int, b: Int, block: (a: Int, b: Int) -> Int): Int {
        return block.invoke(a, b)
    }
    
  1. Lambda表達式單獨存在

    /**
     * @ 文件名:   `11.Lambda表達式單獨存在`
     * @ 創建者:   ty
     * @ 時間:    2018/7/24 14:23
     * @ 描述:    {}.invoke()  {}()
     */
    fun main(args: Array<String>) {
        /*{
             println("lambda表達式單獨存在")//相當于method.invoke()
         }.invoke()*/
    
        {
            println("另一種調用方式")//相當于method()
        }()
    }
    
  1. 有參的lambda表達式

    /**
     * @ 文件名:   `12.有參的lambda表達式`
     * @ 創建者:   ty
     * @ 時間:    2018/7/24 14:36
     * @ 描述:    {}.invoke(a,b)
     */
    
    fun main(args: Array<String>) {
        val invoke = { a: Int, b: Int ->
            a + b
        }.invoke(28, 23)
    
        println(invoke)
    }
    
  1. 保存lambda表達式

    /**
     * @ 文件名:   `13.保存lambda表達式`
     * @ 創建者:   ty
     * @ 時間:    2018/7/24 14:37
     * @ 描述:    lambda表達式null處理
     */
    fun main(args: Array<String>) {
    
        var block: (() -> Unit)? = null
    
        /*block = {
            println("測試")
        }*/
    
        block?.invoke()
    }
    
  1. Lambda表達式使用it

    /**
     * @ 文件名:   `14.Lambda表達式使用it`
     * @ 創建者:   ty
     * @ 時間:    2018/7/24 14:38
     * @ 描述:    lambda表達式使用的時候如果參數只有一個,可以省略參數名,默認是使用it代替
     */
    fun main(args: Array<String>) {
    
    
        val block: ((i: Int) -> Unit) = {
            println(it)
        }
    
        block.invoke(123)
    }
    
  1. Lambda表達式的返回值

    /**
     * @ 文件名:   `15.Lambda表達式的返回值`
     * @ 創建者:   ty
     * @ 時間:    2018/7/24 14:42
     * @ 描述:    lambda表達式返回不用return  默認最后一行。
     */
    fun main(args: Array<String>) {
    
        val block: (() -> Int) = {
            println("test")
            11//最后一行就是return
        }
        println(block())
    }
    
  1. 常見的lambda表達式

    /**
     * @ 文件名:   `16.常見的lambda表達式`
     * @ 創建者:   ty
     * @ 時間:    2018/7/24 14:43
     * @ 描述:    擴展函數  indexOfFirst()
     */
    fun main(args: Array<String>) {
    
        val str = "張三"
    
        /**
         * foreach是一個擴展函數
         * foreach參數是一個函數
         */
        str.forEach {
            println(it)
        }
    
        val arrayOf = arrayOf("林青霞", "林志玲")
        val ofLast = arrayOf.indexOfLast {
            it.endsWith("玲")
        }
        println(ofLast)
    }
    
  1. 非誠勿擾

    /**
     * @ 文件名:   `17.非誠勿擾`
     * @ 創建者:   ty
     * @ 時間:    2018/7/24 14:45
     * @ 描述:
     */
    data class Girl(var name: String, var age: Int, var height: Int, var place: String)
    
    val girls = listOf(Girl("依兒", 18, 168, "山東"),
            Girl("笑笑", 19, 175, "河南"),
            Girl("小百合", 17, 155, "福建"),
            Girl("michel", 22, 148, "廣東"),
            Girl("貓咪", 28, 159, "廣西"),
            Girl("玲兒", 23, 169, "廣東"),
            Girl("環環", 25, 172, "安徽"),
            Girl("胖嘟嘟", 32, 180, "河北"),
            Girl("喬喬", 35, 180, "廣東"),
            Girl("小可愛", 27, 150, "江西"),
            Girl("一生有你", 22, 163, "山東"),
            Girl("敏兒", 28, 155, "黑龍江"),
            Girl("月兒", 25, 178, "吉林"),
            Girl("花兒", 21, 183, "山東"),
            Girl("S小糖", 49, 190, "新疆"),
            Girl("悅悅", 19, 160, "廣西"),
            Girl("小可愛", 29, 158, "廣東"),
            Girl("紫琪", 49, 149, "新疆"),
            Girl("糖心", 26, 165, "甘肅"),
            Girl("棒棒糖", 23, 172, "浙江"),
            Girl("豬豬俠", 18, 173, "山東"),
            Girl("喵喵", 27, 164, "河南"),
            Girl("安琦", 19, 159, "河北"),
            Girl("葉子", 20, 160, "廣東"))
    
    fun main(args: Array<String>) {
        /**
         * filter參數是函數類型
         * filter的predicate函數的參數 是Girl類型
         * predicate 返回值 boolean
         * filter函數返回值 List集合
         */
        /*---------------------------- 俺是河南里,俺只找河南的妹子 ----------------------------*/
        val filter = girls.filter {
            it.place == "河南"
        }
        //println(filter)
    
        /*---------------------------- 我只喜歡30歲以下的女生 ----------------------------*/
        val filterAge = girls.filter {
            it.age < 30
        }
        //println(filterAge)
        /*---------------------------- 我喜歡廣東的 ,身高162以上, 25歲以下的妹子 ----------------------------*/
        val map = girls.filter {
            it.place == "廣東" && it.age < 25 && it.height > 162
        }
        //println(map)
    
        /*---------------------------- 我喜歡廣東的, 身高160以上, 35歲以上的妹子 ----------------------------*/
        val filter1 = girls.filter {
            it.place == "廣東" && it.height > 160 && it.age > 35
        }
        println(filter1)
    }
    
  1. 過濾

    /**
     * @ 文件名:   `18.過濾`
     * @ 創建者:   ty
     * @ 時間:    2018/7/24 14:46
     * @ 描述:    filter
     */
    fun main(args: Array<String>) {
    val list = listOf("張三", "李四", "王五", "趙六", "張四", "李五", "李六")
    val list2 = listOf("周芷若", "張無忌", "張五", "李善長", "林青霞", "李尋歡")
    
        //需求
        //找到第一個姓張的
        val filter = list.find {
            it.startsWith("張")
        }
        //println(filter)
    
        //把第一個集合中所有姓張的找出來
        val filter1 = list.filter {
            it.startsWith("張")
        }
        //println(filter1)
    
        //把兩個集合中所有姓張的找到并存放在同一個集合中
        val mutableListOf = mutableListOf<String>()
        list.filterTo(mutableListOf) {
            it.startsWith("張")
        }
        list2.filterTo(mutableListOf){
            it.startsWith("張")
        }
        //println(mutableListOf)
    
        //把第一個集合中角標為偶數的元素找出來
        val indexed = list.filterIndexed { index, s ->
            index % 2 == 0
        }
        println(indexed)
    }
    
  1. 排序

    /**
     * @ 文件名:   `19.排序`
     * @ 創建者:   ty
     * @ 時間:    2018/7/24 14:47
     * @ 描述:    對普通數據類型和引用數據類型進行排序
     */
    fun main(args: Array<String>) {
        val list = arrayListOf(1, 3, 2, 54, 23, 12, 57, 342, 12)
        println(list.sorted())
        println(list.sortedDescending())
    
        val persons = listOf(Person("依兒", 18),
                Person("笑笑", 19),
                Person("小百合", 17),
                Person("michel", 22),
                Person("貓咪", 28),
                Person("玲兒", 23),
                Person("環環", 25),
                Person("胖嘟嘟", 32),
                Person("喬喬", 35),
                Person("小可愛", 27),
                Person("一生有你", 22),
                Person("敏兒", 28),
                Person("月兒", 25),
                Person("花兒", 21),
                Person("S小糖", 49),
                Person("悅悅", 19),
                Person("小可愛", 29),
                Person("紫琪", 49),
                Person("糖心", 26),
                Person("棒棒糖", 23),
                Person("豬豬俠", 18),
                Person("喵喵", 27),
                Person("安琦", 19),
                Person("葉子", 20))
    
        val byDescending = persons.sortedBy {
            it.age
        }
        println(byDescending)
    
    }
    
    data class Person(var name: String, var age: Int)
    
  1. 分組

    /**
     * @ 文件名:   `20.分組`
     * @ 創建者:   ty
     * @ 時間:    2018/7/24 14:48
     * @ 描述:   groupBy()
     */
    fun main(args: Array<String>) {
        val list = listOf("張三", "李四", "王五", "趙六", "張四", "李五", "李六")
        //姓張的一組 姓李的一組 其他一組
        val groupBy = list.groupBy {
            val substring = it.substring(0, 1)
            when (substring) {
                "張" -> {
                    "張"
                }
                "李" -> {
                    "李"
                }
                else -> {
                    "其他"
                }
            }
        }
        println(groupBy)
    }
    
  1. 最值

    /**
     * @ 文件名:   `21.最值`
     * @ 創建者:   ty
     * @ 時間:    2018/7/24 14:49
     * @ 描述:    普通數據類型和引用數據類型求最大最小值 .max()  .min()
     */
    
    fun main(args: Array<String>) {
        val listOf = arrayListOf(2, 13, 234, 23, 1, 45456, 2, 3, 462, 12, 2, 344, 2)
    
        val max = listOf.max()
        println(max)
    
        val min = listOf.min()
        println(min)
    
        val persons = listOf(Person("依兒", 18),
                Person("笑笑", 19),
                Person("小百合", 17),
                Person("michel", 22),
                Person("貓咪", 28),
                Person("玲兒", 23),
                Person("環環", 25),
                Person("胖嘟嘟", 32),
                Person("喬喬", 35),
                Person("小可愛", 27),
                Person("一生有你", 22),
                Person("敏兒", 28),
                Person("月兒", 25),
                Person("花兒", 21),
                Person("S小糖", 49),
                Person("悅悅", 19),
                Person("小可愛", 29),
                Person("紫琪", 49),
                Person("糖心", 26),
                Person("棒棒糖", 23),
                Person("豬豬俠", 18),
                Person("喵喵", 27),
                Person("安琦", 19),
                Person("葉子", 20))
    
        val maxBy = persons.maxBy {
            it.age
        }
        println(maxBy)
    
        val minBy = persons.minBy {
            it.age
        }
        println(minBy)
    }
    
  1. 去除重復

    /**
     * @ 文件名:   `22.去除重復`
     * @ 創建者:   ty
     * @ 時間:    2018/7/24 14:50
     * @ 描述:    toSet()     distinct()
     */
    fun main(args: Array<String>) {
        val list = listOf("張三","李四","王五","趙六","張四","李五","張三","李六")
        //把重復的張三去掉
        val toSet = list.toSet()
        println(toSet)
        val distinct = list.distinct()
        println(distinct)
    
        //去掉重復姓
        val distinctBy = list.distinctBy {
            it.substring(0,1)
        }
        println(distinctBy)
    }
    
  1. 集合拆分

    /**
     * @ 文件名:   `23.集合拆分`
     * @ 創建者:   ty
     * @ 時間:    2018/7/24 14:51
     * @ 描述:    partition()
     */
    fun main(args: Array<String>) {
        val list = listOf("張三","李四","王五","趙六","張四","李五","張三","李六")
        //姓張的一部分,另外的一部分
        val partition = list.partition {
            it.startsWith("張")
        }
    
        println(partition)
    }
    
  1. 集合重新組合

    /**
     * @ 文件名:   `24.集合重新組合`
     * @ 創建者:   ty
     * @ 時間:    2018/7/24 14:52
     * @ 描述:    map()
     */
    fun main(args: Array<String>) {
        val list1 = listOf(Person("林青霞",50),Person("張曼玉",30),Person("林志玲",40),Person("柳巖",70))
        //將Person里面每一個姓氏獲取到一個單獨的集合中
        val map = list1.map {
            it.name.substring(0,1)
        }.distinct()
        println(map)
    }
    
  1. 集合相加

    /**
     * @ 文件名:   `25.集合相加`
     * @ 創建者:   ty
     * @ 時間:    2018/7/24 14:53
     * @ 描述:    sumBy()
     */
    fun main(args: Array<String>) {
        val list = listOf(Person("林青霞",50),Person("張曼玉",30),Person("柳巖",70))
        //求出所有人的年齡之和
        val sumBy = list.sumBy {
            it.age
        }
    
        println(sumBy)
    }
    
  1. 函數回調

    /**
     * @ 文件名:   `26.函數回調`
     * @ 創建者:   ty
     * @ 時間:    2018/7/24 14:54
     * @ 描述:
     */
    
    open class Mother {
        fun cooking() {
            println("媽媽開始做菜")
        }
    
        fun makeDessert() {
            println("做甜點")
        }
    
        fun getSoy(soy: Soy) {
            println("取回了${soy.name}醬油")
        }
    }
    
    class SuperMarket {
        fun buySoy(block: (Soy) -> Unit?) {
            Thread {
                Thread.sleep(5000)
                val soy = Soy("海天")
                block?.invoke(soy)
            }.start()
        }
    }
    
    class Soy(var name: String)
    
    fun main(args: Array<String>) {
        val mother = Mother()
    
        val superMarket = SuperMarket()
    
        superMarket.buySoy {
            mother.getSoy(it)
            mother.cooking()
        }
    
        mother.makeDessert()
    }
    
  1. 四大函數

    /**
     * @ 文件名:   `27.四大函數`
     * @ 創建者:   ty
     * @ 時間:    2018/7/24 14:53
     * @ 描述:    with apply let run
     */
    fun main(args: Array<String>) {
        val listOf: ArrayList<String> = arrayListOf("林青霞", "林志玲", "林志穎", "李冰冰")
    
    //    listOf?.add("張曼玉")
    //    listOf?.add("王祖賢")
    //    listOf?.add("范冰冰")
    
        /**
         * 任意類型都有apply函數擴展
         * apply參數是一個函數  T.() -> Unit 帶接收者的函數字面值
         * lambda表達式里this代表調用的對象
         * 在lambda表達式里可以訪問對象的方法
         * apply函數返回值就是調用者本身
         */
        listOf?.apply {
            add("張曼玉")
            add("王祖賢")
            add("范冰冰")
        }
    
        /**
         * 任意對象都有let擴展函數
         * let函數參數也是一個函數
         * 函數參數它的參數是調用者本身
         * let函數返回值是函數參數的返回值 就是lambda表達式的返回值
         */
        listOf?.let {
            it.add("張曼玉")
            it.add("王祖賢")
            it.add("范冰冰")
            10
        }
    
        /**
         * with是獨立的函數  可以在任意地方調用
         * with函數需要接收兩個參數
         * 第一個參數可以接收任意類型
         * 第二個參數是函數參數,并且這個函數參數是帶接收者的函數字面值 接收者就是第一個參數
         * with函數返回值是第二個函數參數的返回值
         * 相當于apply和let的結合
         */
        with(listOf) {
            this.add("張曼玉")
            this.add("王祖賢")
            this.add("范冰冰")
            "a"
        }
    
        /**
         * 任意類型都有run擴展函數
         * run函數參數是待接收者的函數 接收者是調用者本身
         * run函數返回值就是函數參數的返回值
         */
        listOf.run {
            this.add("張曼玉")
            this.add("王祖賢")
            this.add("范冰冰")
            "b"
        }
    }
    
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容