Kotlin lambda表达式入门指南

来自:网络
时间:2024-06-09
阅读:

概述

Lambda表达式可以理解为一种匿名函数,是一种高效的类似于函数式编程的表达式。

在kotlin当中,Lambda表达式是最高等级的。Lambda函数可以存储在变量、数据结构中、作为参数传递给其他高阶函数,或者从其他高阶函数返回。

这里的高阶函数可以理解为就是参数为函数的函数或返回值为函数的函数。

lambda表达式的形式看起来就像将一小段代码封装成匿名函数,以参数的形式给函数调用。

在Koltin当中对Lambda表达式的支持十分全面,使用好Lambda表达式可以很好的简化代码。

基本使用

Lambda表达式的基本语法结构:
{(参数名1: 参数类型, 参数2: 参数类型 … 参数n): 参数类型 -> 函数体}

标准的Lambda表达式的样子就是大括号左侧定义参数,用 -> 分隔开,右边是具体的函数体。
在Kotlin当中的函数体最后一行便是返回值。

例如:

//无参、无返回值的函数类型(Unit 返回类型不可省略)
{() -> Unit}
//接收T类型参数、无返回值的函数类型
{(T) -> Unit}
//接收T类型和A类型参数、无返回值的函数类型(多个参数同理)
{(T,A) -> Unit}
//接收T类型参数,并且返回R类型值的函数类型
{(T) -> R}
//接收T类型和A类型参数、并且返回R类型值的函数类型(多个参数同理)
{(T,A) -> R} 

知道怎么看之后,我们就需要学习如何去简化,简化这部分就是很容易导致看不懂的情况出现。

Lambda表达式的简化

1、 可以将Lambda表达式作为参数传入方法中。

 val list = listOf("Apple", "Banana", "Orange", "Pear", "Watermelon")
        val lambda = { (fruit: String) -> fruit.length }    // lambda表达式做变量
        //注意这里是小括号,括号中接收的Lambda参数
        val maxLengthFruit = list.maxBy(lambda)            //传入
        val maxLengthFruit = list.maxBy({ fruit: String -> fruit.length })    //简化1
        println("单词最长的水果:" + maxLengthFruit)

2、当变量是最后一个变量,且是lambda表达式时,可以将表达式移动到括号后面

val list = listOf("Apple", "Banana", "Orange", "Pear", "Watermelon")
        //val lambda = { fruit: String -> fruit.length }    // lambda表达式做变量
        //注意这里是小括号,括号中接收的Lambda参数
        // val maxLengthFruit = list.maxBy(lambda)            //传入
        // val maxLengthFruit = list.maxBy({ fruit: String -> fruit.length })    //简化1
        val maxLengthFruit = list.maxBy(){ fruit: String -> fruit.length }   //简化2
        println("单词最长的水果:" + maxLengthFruit)

3、当变量是唯一的一个变量时,可以省略括号:

val list = listOf("Apple", "Banana", "Orange", "Pear", "Watermelon")
        //val lambda = { fruit: String -> fruit.length }    // lambda表达式做变量
        //注意这里是小括号,括号中接收的Lambda参数
        // val maxLengthFruit = list.maxBy(lambda)            //传入
        // val maxLengthFruit = list.maxBy({ fruit: String -> fruit.length })    //简化1
        // val maxLengthFruit = list.maxBy(){ fruit: String -> fruit.length }   //简化2
        val maxLengthFruit = list.maxBy{ fruit: String -> fruit.length }   // 简化3
        println("单词最长的水果:" + maxLengthFruit)

4、使用kotlin的类型推断,省略类型声明:

val list = listOf("Apple", "Banana", "Orange", "Pear", "Watermelon")
        //val lambda = { fruit: String -> fruit.length }    // lambda表达式做变量
        //注意这里是小括号,括号中接收的Lambda参数
        // val maxLengthFruit = list.maxBy(lambda)            //传入
        // val maxLengthFruit = list.maxBy({ fruit: String -> fruit.length })    //简化1
        // val maxLengthFruit = list.maxBy(){ fruit: String -> fruit.length }   //简化2
        // val maxLengthFruit = list.maxBy{ fruit: String -> fruit.length }   // 简化3
        val maxLengthFruit = list.maxBy{ fruit -> fruit.length }  // 简化4
        println("单词最长的水果:" + maxLengthFruit)

5、当变量只有一个参数时,可以使用it来进行指代:

val list = listOf("Apple", "Banana", "Orange", "Pear", "Watermelon")
        //val lambda = { fruit: String -> fruit.length }    // lambda表达式做变量
        //注意这里是小括号,括号中接收的Lambda参数
        // val maxLengthFruit = list.maxBy(lambda)            //传入
        // val maxLengthFruit = list.maxBy({ fruit: String -> fruit.length })    //简化1
        // val maxLengthFruit = list.maxBy(){ fruit: String -> fruit.length }   //简化2
        // val maxLengthFruit = list.maxBy{ fruit: String -> fruit.length }   // 简化3
        // val maxLengthFruit = list.maxBy{ fruit -> fruit.length }  // 简化4
        val maxLengthFruit = list.maxBy{ it.length }    // 简化5
        println("单词最长的水果:" + maxLengthFruit)

可以看懂这些,基本上对koltin当中的Lambda表达式的基本使用和阅读就没有问题啦!

返回顶部
顶部