-
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) }
-
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") } }
-
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) }
-
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") } }
-
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) }
-
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}") } }
-
閉包
/** * @ 文件名: `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++ } }
-
高階函數
/** * @ 文件名: `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 }
-
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) }
-
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) }
-
Lambda表達式單獨存在
/** * @ 文件名: `11.Lambda表達式單獨存在` * @ 創建者: ty * @ 時間: 2018/7/24 14:23 * @ 描述: {}.invoke() {}() */ fun main(args: Array<String>) { /*{ println("lambda表達式單獨存在")//相當于method.invoke() }.invoke()*/ { println("另一種調用方式")//相當于method() }() }
-
有參的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) }
-
保存lambda表達式
/** * @ 文件名: `13.保存lambda表達式` * @ 創建者: ty * @ 時間: 2018/7/24 14:37 * @ 描述: lambda表達式null處理 */ fun main(args: Array<String>) { var block: (() -> Unit)? = null /*block = { println("測試") }*/ block?.invoke() }
-
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) }
-
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()) }
-
常見的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) }
-
非誠勿擾
/** * @ 文件名: `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) }
-
過濾
/** * @ 文件名: `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) }
-
排序
/** * @ 文件名: `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)
-
分組
/** * @ 文件名: `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) }
-
最值
/** * @ 文件名: `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) }
-
去除重復
/** * @ 文件名: `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) }
-
集合拆分
/** * @ 文件名: `23.集合拆分` * @ 創建者: ty * @ 時間: 2018/7/24 14:51 * @ 描述: partition() */ fun main(args: Array<String>) { val list = listOf("張三","李四","王五","趙六","張四","李五","張三","李六") //姓張的一部分,另外的一部分 val partition = list.partition { it.startsWith("張") } println(partition) }
-
集合重新組合
/** * @ 文件名: `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) }
-
集合相加
/** * @ 文件名: `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) }
-
函數回調
/** * @ 文件名: `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() }
-
四大函數
/** * @ 文件名: `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" } }