美文网首页
Kotlin-Lambda编程-集合的函数式API

Kotlin-Lambda编程-集合的函数式API

作者: 陈饥饿 | 来源:发表于2022-03-08 08:54 被阅读0次

    1、从集合中找到单词最长的:

    val list = listOf("Apple","Banana","Orange","Pear","Grape","Watermelon")

    val maxLengthFruit = list.maxBy{ it.length }

    println("max length fruit is " + maxLengthFruit)

    2、Lambda是一小段可以用作参数传递的代码,正常情况下我们向某个函数传参时只能传入变量,而借助Lambda却允许传入一小段代码,通常不建议在Lambda表达式中编写太长的代码。

    3、Lambda表达式的语法结构:

    {参数名1: 参数类型, 参数名2: 参数类型 -> 函数体}

    3.1、如果有参数传入到Lambda表达式中,需要声明参数列表;

    3.2、参数列表结尾使用符号 ->,表示参数列表结束以及函数体的开始;

    3.3、函数体中可以编写任意行代码,不建议太长,并且最后一行代码会自动作为Lambda表达式的返回值

    3.4、套用Lambda表达式的语法结构,并将它传入到maxBy函数中:

    val list = listOf("Apple","Banana","Orange","Pear","Grape","Watermelon")

    val lambda = { fruit: String -> fruit.length}

    val maxLengthFruit = list.maxBy(lambda)

    我们不需要定义一个lambda变量,而是可以直接将lambda表达式传入maxBy函数中:

    val maxLengthFruit = list.maxBy({ fruit: String -> fruit.length })

    Kotlin规定,当Lambda参数是函数的最后一个参数时,可以将Lambda表达式移到函数括号的外面:

    val maxLengthFruit = list.maxBy(){ fruit: String -> fruit.length }

    如果Lambda参数是函数的唯一一个参数,可以将函数的括号省略:

    val maxLengthFruit = list.maxBy{ fruit: String -> fruit.length }

    由于Kotlin拥有出色的类型推导机制,Lambda表达式中的参数列表其实在大多数情况下不必声明参数类型:

    val maxLengthFruit = list.maxBy{fruit -> fruit.length}

    当Lambda表达式的参数列表中只有一个参数时,也不必声明参数名,而是可以用it关键字来代替:

    val maxLengthFruit = list.maxBy{ it.length }

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

    val list = listOf("Apple","Banana","Orange","Pear","Grape","Watermelon")

    val newList = list.map{ it.toUpperCase() }//在map函数的Lambda表达式中指定将单词转换成大些模式

    5、filter函数:filter函数是用来过滤集合中的数据的,它可以单独使用,也可以配合map函数一起使用。

    val list = listOf("Apple","Banana","Orange","Pear","Grape","Watermelon")

    val newList = list.filter{ it.length <= 5 }.map{ it.toUpperCase() }//只保留五个字母以内

    5.1、上述代码也可以改为先调用map函数再调用filter函数,但是效率会差很多,因为这样就相当于要对集合中所有的元素都进行一次映射转换后再进行过滤。

    6、any函数用于判断集合中是否至少存在一个元素满足指定要求,all函数用于判断集中是否所有元素都满足指定条件:

    val list = listOf("Apple","Banana","Orange","Pear","Grape","Watermelon")

    val anyResult = list.any{ it.length <= 5 }//true

    val allResult = list.all{ it.length <= 5 }//false

    相关文章

      网友评论

          本文标题:Kotlin-Lambda编程-集合的函数式API

          本文链接:https://www.haomeiwen.com/subject/jqrmrrtx.html