Kotlin小笔记Lambda和集合的函数API
Posted Rose J
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kotlin小笔记Lambda和集合的函数API相关的知识,希望对你有一定的参考价值。
本文目录
Lambda
集合
1.list
kotlin初始化集合
` val list = listOf("Apple","Pear")
for (fruit in list)
println(fruit)
`
不可变的集合–只能取
可变集合 -mutableListOf
` val list = mutableListOf("","")`
2.set
和set一样
3.map
添加
map[“Apple”]=1
读取
val number = map[“Apple”]
示例
val map=HashMap<String,Int>()
map["Apple"]=1
更加简洁写法,键值对读取
`
val map2 = mapOf(“Apple” to 1)
for ((fruit,number) in map2)
`
集合的函数API
1.list
在一个水果集合中找到单词最长的那个水果
val list = listOf("Apple","Pear","Orange")
val maxLengthFruit= list.maxByOrNull it.length
Log.i("check11",maxLengthFruit.toString() )
Lambda表达式的语法结构
参数名1:参数类型,参数名2:参数类型 -> 函数体
->表示参数列表的结束,以及函数体的开始,函数体中可以编写任意行代码(不要太长,最后一行代码会自动作为Lambda表达式的返回值
对上面代码套用Lambda
fun main()
val list = listOf("Apple","Pear","Orange")
val lambda =fruit:String -> fruit.length
val maxLengthFruit =list.maxByOrNull(lambda)
println(""+maxLengthFruit)
简化lambda变量的声明
val maxLengthFruit =list.maxByOrNull(fruit:String -> fruit.length)
根据kotlin规定,lambda参数是函数的最后一个参数的话,可以将lambda表达式移到函数括号的外面,如下
val maxLengthFruit =list.maxByOrNull()fruit:String -> fruit.length
接下来,如果lambda参数是函数的唯一一个参数的话,还可以将函数的括号省略
val maxLengthFruit =list.maxByOrNullfruit:String -> fruit.length
由于kotlin的推导机制,可以不用声明参数类型
val maxLengthFruit =list.maxByOrNullfruit -> fruit.length
最后,lambda表达式的参数列表中只有一个参数时,也不必声明参数名,而是可以使用it关键词来代替
val maxLengthFruit =list.maxByOrNullit.length
通过推导,得到函数API的写法
2.map
集合中的map函数,用于将集合中的每个元素都映射成一个另外的值,映射的规则在Lambda表达式中指定,最终生成一个新的集合。
例如:让所有水果名转为大写
fun main()
val list = listOf("Apple","Pear","Orange")
val newList =list.mapit.toUpperCase()
for(fruit in newList)
println(fruit)
输出:
APPLE
PEAR
ORANGE
map函数功能很强大,他可以按照我们的需求对集合中的元素进行任意的映射转换,除了上面以外,还可以转成小写,或者只取单词的首字母,甚至转成单词长度这样一个数字集合,只要在Lambda表达式中编写你需要的逻辑即可。
3. filter
例如:保留5个字母以内的水果,可以用 filter 函数实现
fun main()
val list = listOf("Apple","Pear","Orange")
val newList =list.mapit.toUpperCase()
for(fruit in newList)
println(fruit)
输出:
Apple
Pear
配合map使用
fun main()
val list = listOf("Apple","Pear","Orange")
val newList =list.mapit.toUpperCase()
for(fruit in newList)
println(fruit)
输出:
APPLE
PEAR
先filter函数再调用map函数,如果先map函数效率会差很多,因为这样相当于要对集合中的所有元素进行一次映射转换再进行过滤。相反,效率会高效很多、
4.any和all
any函数:用于判断集合中石是否至少存在一个元素满足指定条件
all函数:用于判断集合中是否所有元素都满足指定条件
fun main()
val list = listOf("Apple","Pear","Orange","Watermelon")
val anyResult =list.anyit.length <= 5
val allResult =list.allit.length <= 5
println("anyResult is " + anyResult+", allResult is" + allResult)
输出:
anyResult is true, allResult isfalse
Java函数式API的使用
1.匿名类
Thread(object :Runnable
override fun run()
TODO("Not yet implemented")
).start()
Kotlin的匿名类
Thread(Runnable
TODO("Not yet implemented")
).start()
简化,因为Runnable类中只有一个待实现方法,即使这里 没有显示的重写run方法,kotlin也可以自动明白Runnable后面的lambda表达式就是要在run方法中实现的内容
Thread
TODO("Not yet implemented")
.start()
当Lambda表达式是方法中的最后一个参数时,可以将Lambda表达式移到方法括号的外面,然后省掉()
以上是关于Kotlin小笔记Lambda和集合的函数API的主要内容,如果未能解决你的问题,请参考以下文章
Kotlin 学习笔记—— 基本类型函数lambda类与对象的写法