Kotlin学习笔记-常见用法
is 运算符检测一个表达式是否某类型的一个实例。 如果一个不可变的局部变量或属性已经 判断出为某类型,那么检测后的分支中可以直接当作该类型使用,无需显式转换:
//sampleStart fun getStringLength(obj: Any): Int? { if (obj is String) { // `obj` 在该条件分支内自动转换成 `String` return obj.length } // 在离开类型检测分支后,`obj` 仍然是 `Any` 类型 return null }
使用 lambda 表达式来过滤(filter)和映射(map)集合:
fun main(args: Array<String>) { val fruits = listOf("banana", "avocado", "apple", "kiwi") //sampleStart fruits .filter { it.startsWith("a") } .sortedBy { it } .map { it.toUpperCase() } .forEach { println(it) } //sampleEnd }
创建 DTOs(POJOs/POCOs)
data class Customer(val name: String, val email: String)
会为 Customer 类提供以下功能: 所有属性的 getters (对于 var 定义的还有 setters) equals() hashCode() toString() copy() 所有属性的 component1() 、 component2() ……等等(参见数据类)
过滤 list
val positives = list.filter { x -> x > 0 }
//或者可以更短:
val positives = list.filter { it > 0 }
遍历 map/pair型list
for ((k, v) in map) { println("$k -> $v") } k 、 v 可以改成任意名字。
使用区间
for (i in 1..100) { …… } // 闭区间:包含 100 for (i in 1 until 100) { …… } // 半开区间:不包含 100 for (x in 2..10 step 2) { …… } for (x in 10 downTo 1) { …… } if (x in 1..10) { …… }
延迟属性
val p: String by lazy { // 计算该字符串 }
扩展函数
fun String.spaceToCamelCase() { …… }
//使用
"Convert this to camelcase".spaceToCamelCase()
创建单例
object Resource { val name = "Name" }
对一个对象实例调用多个方法 ( with )
class Turtle { fun penDown() fun penUp() fun turn(degrees: Double) fun forward(pixels: Double) } val myTurtle = Turtle() with(myTurtle) { // 画一个 100 像素的正方形 penDown() for(i in 1..4) { forward(100.0) turn(90.0) } penUp() }
合并集合
val list = listOf(1..10,11..20) val flatList = list.flatMap{it} flatList.forEach(::println)//输出1...20
集合元素迭代操作
val list = listOf(1..10) println(list.reduce { acc, i -> i + acc })//输出1到10的和 //带初始值的迭代 println(list.fold(5){acc, i -> i + acc }) //输出初始值为5,叠加1到10的的和
有条件的迭代
val list = listOf(1,2,3,4,5,6) list.takeWhile { it % 2 == 1}.forEach(::println)//只输出1,当出现不满足条件元素时马上终止
本文来自博客园,作者:DeDeDi,转载请注明原文链接:https://www.cnblogs.com/gdut-chj/articles/7729037.html

浙公网安备 33010602011771号