Kotlin 入门总结3

88 阅读1分钟
1.
//分支表达式 if else
var a = 6
var c = if (a == 3) 4 else 5



//分支表达式 when
val d = when (a) {
    0 -> 5
    1 -> 100
    6 -> "666"
    else -> 20
}



2.
//lambda 表达式 ()匿名函数->返回值为Unit
val method: () -> Unit = {
    println("hello")
}
//最后一行就是返回值,接收一个Int参数返回一个"Hello"
val f1={ p:Int->
    println("hello")
    "Helo"
}
val date= f1(1)



3.
//高阶函数 参数接收函数类型或返回值类型是一个函数
//只有一个lambda表达式做为参数可以省略()

val fbmethod=fbmethod()
cost{
    fbmethod()
}

//函数做为参数
fun cost(method:()->String){
    val start=System.currentTimeMillis()
    method()
    println(System.currentTimeMillis()-start)
}

//返回值是一个函数
fun fbmethod():()->String{
    return {
        "@@Hello"
    }
}




4.
//高阶函数和内联函数配合可以减少内存开销,内联会把参数函数放到编译处
//non-local return 使用crossinline标记
inline fun method(haha:()->Unit){

}



5.
//有用的高阶函数let also use(产生太多receiver的不太好管理)
val person=Person("zhangsan",20)
//无receiver
person.let {it.name="lisi"}
//有receiver
person.run {name="lisi"}
//有返回值可赋值后使用
var person2=person.also {it.name="lisi"}
//有返回值可赋值后使用,有Receiver,可直接用属性
var person3=person.apply {name="wangwu"}
//出了use后面的表达式流会被关闭
File("heh.txt").inputStream().reader().buffered().use {
}

6.
//集合变换与序列 asSequence 懒汉式 满足条件就会往下走依次执行fliter->map->for
//没有asSequence是饿汉式 filter全部执行->map全部执行->for
//filter过滤  map映射
val list = listOf<Int>(1, 2, 3, 4, 5)

list.asSequence().filter {
    println("filter$it")
    it % 2 == 0
}.map {
    println("map$it")
    it * 2 + 1
}.forEach {
    println("foreach:$it")
}


//flatmap->每个元素映射为集合->集合拼接起来新集合
list.flatMap {
    0 until it
}.joinToString().let {

}

// 集合的聚合fold acc 是初始化的值,i是对应的元素->"12345"
list.fold(StringBuilder()){
    acc, i -> acc.append(i)
}