val list = ArrayList<String>() // 可变 list.add("Apple") list.add("Banana") // ------------------------------- val list = listOf("Apple", "Banana") // 不可变 val list2 = mutableListOf("Apple", "Banana") // 可变 for (fruit in list) { println(fruit) }
集合
1
valset = setOf("Apple", "Banana") // HashSet
Map
1 2 3 4 5 6 7 8
val map = HashMap<String, Int>() map.put("Apple", 1) map["Banana"] = 1 // -------------------------------- val map = mapOf("Apple" to 1, "Banana" to 2) // to 是 infix函数 for ((fruit, number) in map) { println(fruit + " is " + number) }
集合的函数式API
1 2 3 4
val maxLengthFruit: String = list.maxBy{ it.length } val newList = list.filter{ it.length < 5 }.map { it.toUpperCase() } val isOk: Boolean = newList.all{ it.length < 5 } val isFault: Boolean = newList.any{ it.length >= 5 }
Lambda表达式语法结构:
1 2
{v1: Type, v2: Type -> body} // 返回值是body的最后一行代码
Lambda表达式举例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
val lambda = { fruit: String -> fruit.length } val maxLengthFruit = list.maxBy(lambda) val maxLengthFruit = list.maxBy({ fruit: String -> fruit.length })
// Runnable只有一个抽象方法 Thread(Runnale { println("Thread is running.") // Lambda表达式覆盖run() }).start()
//
// Thread的参数列表中有且只有Runnable Thread({ println("Thread is running.") // Lambda表达式覆盖run() }).start()
// lambda是唯一一个参数 Thread { println("Thread is running.") }.start()
// 举例 button.setOnClickListener { }
常用标准函数
let 返回最后一行
1 2 3
obj?.let { it.f() }
also 返回本身
1 2 3
obj?.also { it.f() }
with 返回最后一行
1 2 3 4
with(StringBuilder()) { append("\n") toString() }
run 返回最后一行
1 2 3 4
StringBuilder().run { append("\n") toString() }
apply 返回本身
1 2 3
StringBuilder().apply { append("\n") }
空类型系统
Kotlin默认编译器形参不可为空。
可空类型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
fundoStudy(a: Study?, b: Study) { // 加问号,表示可空 a.readBooks() // 编译错误,未处理空 a?.readBooks() // 正确,若a为null则返回null a!!.readBooks() // 正确,向编译器保证a不为空。 val c = a ?: b // c = if (a!=null) a else b }