然后我们想要过滤出字符串元素的长度是奇数的列表。我们把这个问题的解决逻辑拆成两个函数来组合实现:
val f = fun (x: Int) = x % 2 == 1 //判断输入的Int是否奇数
val g = fun (s: String) = s.lenth //返回输入的字符串长度
然后我们再使用函数h 来封装"字符串元素的长度是奇数"这个逻辑,代码如下:
val h = fun(g: (String) -> Int, f: (Int) -> Boolean): (String) -> Boolean {
return { f(g(it)) }
}
但是这个h函数声明太长了,不过Kotlin中有简单好用的Kotlin类型别名,我们使用 G、F、H来声明3个函数类型:
typealias G = (String) -> Int
typealias F = (Int) -> Boolean
typealias H = (String) -> Boolean
那么我们就可以这么写了:
val h = fun(g: G, f: F): H{
return { f(g(it)) } //需要注意的是 {}是不能省略的
}
在函数体的代码 { f(g(it)) }
中,{}代表这就是一个Lambda表达式,返回的是一个 (String)->Boolean函数类型。如果没有 {} 那么函数返回的就是一个 Boolean值了。
那么使用就是:
println(strList.filter(h(g,f)))
接下来介绍五个特殊函数, run() apply() let() also() with()
5.1 run()
run()函数返回一个 block(),其实就是调用传入的block参数,一般情况下是一个Lambda代码块。
fun testRunFun(){
myfun() //直接在代码行调用函数
run ({ myfun() }) //使用run()函数调用myfun函数
run { myfun() } //run()函数的括号 可以省略
run { println(“Rikka”) } //等价于println(“Rikka”)
}
5.2 apply()
源码显示调用 block(),在返回当前的调用者对象this。
意思是执行完block()代码块逻辑后,再次返回当前的调用者对象。测试代码示例如下:
fun testApply(){
//普通写法
val list = mutableListOf()
list.add(“A”)
list.add(“B”)
println(list)
//apply()写法
val a = ArrayList().apply {
add(“A”)
add(“B”)
println("$this")
}
println(a)
//等价于
a.let( println(it) )
}
5.3 let()
let函数返回了 block(this) ,意思是把当前调用者对象作为参数传入 block()中,测试代码如下:
fun testLetFun() {
1.let{ println(it) } //输出1
“ABC”.let{ println(it) } //输出ABC,其中it就是调用者ABC
myfun().let{ println(it) } //执行fun函数
}
5.4 also()
先调用 block(this),再返回this
val a = “ABC”.also {
println(it) //输出ABC
}
println(a)
5.4 with()
with()传入了一个接受者对象 receiver,然后使用该对象receiver去调用传入的 代码块block()
//常规写法
val list = mutableListOf()
list.add(“A”)
list.add(“B”)
println("$list")
//使用with()函数写法
with(ArrayList()){
add(“A”)
add("B)
println("$this")
}.let{
最后
最后这里放上我这段时间复习的资料,这个资料也是偶然一位朋友分享给我的,里面包含了腾讯、字节跳动、阿里、百度2019-2021面试真题解析,并且把每个技术点整理成了视频和PDF(知识脉络 + 诸多细节)。
还有 高级架构技术进阶脑图、高级进阶架构资料 帮助大家学习提升进阶,也可以分享给身边好友一起学习。
一起互勉~
最后这里放上我这段时间复习的资料,这个资料也是偶然一位朋友分享给我的,里面包含了腾讯、字节跳动、阿里、百度2019-2021面试真题解析,并且把每个技术点整理成了视频和PDF(知识脉络 + 诸多细节)。
还有 高级架构技术进阶脑图、高级进阶架构资料 帮助大家学习提升进阶,也可以分享给身边好友一起学习。
[外链图片转存中…(img-tZ2uiUyj-1643882471704)]
[外链图片转存中…(img-WD0f3FXb-1643882471705)]
一起互勉~