kotlin 学习 之 一些常见用法

When表达式
加强版的switch,支持任意类型
支持纯表达式条件分支(类似于if)
表达是必须得完整

fun main(args: Array<String>) {
    val x = 5
    when(x){
        //是否是int
        is Int -> println("hello $x")
        //是在区间范围内
        in 1..100 -> println("$x 在1-100区间内")
        //不在区间内
        !in 1..100 -> println("$x 不在1-100区间内")
        //判断x和下面的表达式值是不是一样
        args[0].toInt() -> println("参数和 $x 一样")
    }

    val mode = when{
        args.isNotEmpty() && args[0] == "1" ->1
        else -> 0
    }

    println(mode)
}

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,当出现不满足条件元素时马上终止
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值