Basic Kotlin Language Advanced
Classes 类
类的声明: 类名称,类头(可选),类身(可选)
class Customer class Contact(val id: Int, var email: String)
Collections 集合
主要集合: List, Set, Map
需创建可变集合时,添加mutable
val list1: MutableList<Int> = mutableListOf(1, 2, 3)val list2: List<Int> = ListOf(1, 2, 3)
集合函数
val numbers = listOf(1, -2, 3, -4, 5, -6) // filter 截取 val positives = numbers.filter { x -> x > 0 } val negatives = numbers.filter { it < 0 } // map 映射 val doubled = numbers.map { x -> x * 2 } val tripled = numbers.map { it * 3 } // any 存在 val anyNegative = numbers.any { it < 0 } // all 存在 val allEven = numbers.all { it % 2 == 0 } // none 存在 val allEven2 = numbers.none { it % 2 == 1 } // find 查找 val words = listOf("Lets", "find", "something", "in", "collection", "somehow") // 1 val first = words.find { it.startsWith("some") } // 2 val last = words.findLast { it.startsWith("some") } // 3 val nothing = words.find { it.contains("nothing") } // first 查找 val firstNum = numbers.first() val lastNum = numbers.last() val firstEven = numbers.first { it % 2 == 0 } // 4 val lastOdd = numbers.last { it % 2 != 0 } // 数量 val totalCount = numbers.count() // 2 val evenCount = numbers.count { it % 2 == 0 } data class Person(val name: String, val city: String, val phone: String) // 1 val people = listOf( // 2 Person("John", "Boston", "+1-888-123456"), Person("Sarah", "Munich", "+49-777-789123"), Person("Svyatoslav", "Saint-Petersburg", "+7-999-456789"), Person("Vasilisa", "Saint-Petersburg", "+7-999-123456")) val phoneBook = people.associateBy { it.phone } // 3 val cityBook = people.associateBy(Person::phone, Person::city) // 4 val peopleCities = people.groupBy(Person::city, Person::name) // 5 // filter 分割 val evenOdd = numbers.partition { it % 2 == 0 } // ([-2, -4, -6], [1, 3, 5]) val (positives2, negatives2) = numbers.partition { it > 0 } // flatMap 映射 val tripled2 = numbers.flatMap { listOf(it, it, it) } // [] println(numbers.flatMap { listOf(it, it *it) }) // [1, 1, -2, 4, 3, 9, -4, 16, 5, 25, -6, 36] // min and max functions 最大最小 val empty = emptyList<Int>() println("Numbers: $numbers, min = ${numbers.min()} max = ${numbers.max()}") // 1 println("Empty: $empty, min = ${empty.min()}, max = ${empty.max()}") // For empty collections both functions return null. // sorted 排序 println("Soroted: ${ numbers.sorted()}") val inverted = numbers.sortedBy { -it } // 获取map的值 val map = mapOf("key" to 42) val value1 = map["key"] val value2 = map["key2"] // 返回null val value3: Int = map.getValue("key") // 存在正常,不存在异常 val mapWithDefault = map.withDefault { k -> k.length } // 设置默认值 val value4 = mapWithDefault.getValue("key2") try { map.getValue("anotherKey") // 4 } catch (e: NoSuchElementException) { println("Message: $e") } // zip 压缩 val A = listOf("a", "b", "c") // 1 val B = listOf(1, 2) // 1 // zip 不能变长 val resultPairs = A zip B // [(a, 1), (b, 2)], val resultReduce = A.zip(B) { a, b -> "$a$b" } //[a1, b2], val resultlist = A.zip(B) { a, b -> listOf(a,b) } // [[a, 1], [b, 2]] // getOrElse 获取 val list = listOf(0, 10, 20) println(list.getOrElse(1) { 42 }) println(list.getOrElse(10) { 42 }) val map3 = mutableMapOf<String, Int?>() println(map3.getOrElse("x") { 1 }) map3["x"] = 3 println(map3.getOrElse("x") { 1 }) map3["x"] = null println(map3.getOrElse("x") { 1 })
Reference 参考
- kotlin Example