Kotiln基础

四、Lambda编程
1.集合的遍历与创建
Kotlin专门提供了一个内置的listOf()函数来简化初始化List集合的写法,示例:

val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape")
1
for-in循环遍历集合,示例:

for (fruit in list) {
    println(fruit)
}
1
2
3
注意:

listOf()函数创建的是一个不可变的集合。不可变集合指的是该集合只能读取,无法进行添加、修改或删除操作。
使用mutableListOf()函数创建一个可变的集合,示例:

val list = mutableListOf("Apple", "Banana", "Orange", "Pear", "Grape")
list.add("Watermelon")
1
2
Set集合创建和遍历方式和List集合的类似,只是将创建集合的方式换成了setOf()和mutableSetOf()函数而已。

注意:

Set集合底层是使用hash映射机制来存放数据的,因此集合中的元素无法保证有序。
Map是一种键值对形式的数据结构,在用法上和上诉集合有较大的不同。相比于Java,Kotlin中不建议使用put()和get()方法来对Map进行添加和读取操作,而推荐使用一种类似于数字下标的语法结构,示例:

val map = HashMap<String, Int>()
//添加数据
map["Apple"] = 1
//读取数据
val number = map["apple"]
1
2
3
4
5
Kotlin也提供了一对mapOf()和mutableMapOf()函数来简化Map的用法。在mapOf()函数中,直接传入初始化的键值对组合来完成对Map集合的创建,示例:

val map = mapOf("Apple" to 1, "Banana" to 2, "Orange" to 3)
1
注意:

上诉代码中的to不是关键字,而是一个infix函数
for-in循环遍历Map,示例:

for ((fruit, number) in map) {
    println(fruit + number)
}
1
2
3
2.集合的函数式API
Lambda的定义: Lambda就是一小段可以作为参数传递的代码。

Lambda表达式的语法结构:

{参数名1: 参数类型, 参数名2: 参数类型 -> 函数体}
1
上诉代码中最外层是一对大括号,如果有参数传入到Lambda表达式中,则需要声明参数列表,参数列表结尾用一个->符号,表示参数列表的结束以及函数体的开始,函数体中可以编写任意行代码,最后一行会自动作为Lambda表达式的返回值。

比如我们需要找到list中长度最长的那个单词,初始代码示例如下:

val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape")
val lambda = {fruit: String -> fruit.length}
val maxLengthFruit = list.maxBy(lambda)
1
2
3
第一步化简,直接将lambda表达式传入maxBy函数中:

val maxLengthFruit = list.maxBy({fruit: String -> fruit.length})
1
Kotlin规定,当Lambda参数是函数的最后一个参数时,可以将Lambda表达式移到函数括号外面,示例:

val maxLengthFruit = list.maxBy() {fruit: String -> fruit.length}
1
如果Lambda参数是函数的唯一一个参数,则可以把函数的括号省略,示例:

val maxLengthFruit = list.maxBy {fruit: String -> fruit.length}
1
由于Kotlin的类型推导机制,Lambda表达式中的参数列表在大多数情况下不必声明参数类型,示例:

val maxLengthFruit = list.maxBy {fruit -> fruit.length}
1
当Lambda表达式的参数列表只有一个参数时,也不必声明参数名,可以使用it关键字代替,示例:

val maxLengthFruit = list.maxBy {it.length}
1
map函数:

集合中map函数是最常用的一种函数式API,它用于将集合中的每一个元素都映射成另外的值,映射规则在Lambda表达式中指定,最终生成一个新的集合。

示例:

val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape")
//将单词转换成大写
val newList = list.map {it.toUpperCase()}
1
2
3
filter函数:

用来过滤集合中的数据。可以单独使用,也可以配合map函数使用,示例:

val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape")
//保留五个字母以内的单词,并转换成大写
val newList = list.filter {it.length <= 5}.map {it.toUpperCase()}
1
2
3
any和all函数:

any函数用于判断集合中是否存在一个元素满足指定条件,all函数用于判断集合中是否所有元素都满足指定条件。示例:

val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape")
val anyResult = list.any {it.length <= 5} //true
val allResult = list.all {it.length <= 5} //false
1
2
3
3.Java函数式API的使用
如果我们在Kotlin代码中调用了一个Java方法,并且该方法接收一个Java单抽象方法接口参数,就可以使用函数式API。Java单抽象方法接口指的是接口中只有一个待实现的方法。

Java中有一个最为常用的单抽象方法接口——Runnable接口。Java代码创建并执行一个子线程的代码如下:

new Thread(new Runnable() {
    @Override
    public void run() {
        System.out.println("running!!")
    }
}).start();
1
2
3
4
5
6
使用Kotlin,最简写法如下:

Thread {
    println("running!!")
}.start()
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/weixin_45922212/article/details/115557579

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值