Kotlin lambda表达式入门指南

 更新时间:2024年03月01日 10:19:08   作者:Nimrod__  
在kotlin当中,Lambda表达式是最高等级的,Lambda表达式可以理解为一种匿名函数,是一种高效的类似于函数式编程的表达式,本文介绍Kotlin lambda表达式入门指南,感兴趣的朋友一起看看吧

概述

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表达式的基本使用和阅读就没有问题啦!

到此这篇关于Kotlin lambda表达式入门指南的文章就介绍到这了,更多相关Kotlin lambda表达式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Android自定义View实现内存清理加速球效果

    Android自定义View实现内存清理加速球效果

    这篇文章主要为大家详细介绍了Android自定义View实现内存清理加速球的效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-02-02
  • Android 实现沉浸式状态栏的方法

    Android 实现沉浸式状态栏的方法

    沉浸式状态栏的来源就是很多手机用的是实体按键,没有虚拟键,于是开了沉浸模式就只有状态栏消失了。下面脚本之家小编给大家介绍Android 实现沉浸式状态栏,需要的朋友可以参考下
    2015-09-09
  • Hook实现Android 微信、陌陌 、探探位置模拟(附源码下载)

    Hook实现Android 微信、陌陌 、探探位置模拟(附源码下载)

    这篇文章主要介绍了Hook实现Android 微信、陌陌 、探探位置模拟(附源码下载)的相关资料,需要的朋友可以参考下
    2017-03-03
  • Android实现未读消息小红点显示实例

    Android实现未读消息小红点显示实例

    大家好,本篇文章主要讲的是Android实现未读消息小红点显示实例,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-02-02
  • Android判断是否为飞行模式简单方法

    Android判断是否为飞行模式简单方法

    这篇文章主要介绍了Android判断是否为飞行模式简单方法,本文使用最简单的方法实现判断是否为飞行模式,需要的朋友可以参考下
    2015-04-04
  • 详解Android单元测试方法与步骤

    详解Android单元测试方法与步骤

    这篇文章给大家分享了Android单元测试方法与步骤的相关知识点,有兴趣和需要的朋友参考学习下。
    2018-07-07
  • 详解Android平台上读写NFC标签

    详解Android平台上读写NFC标签

    NFC,即Near Field Communication,近距离无线通讯技术,是一种短距离的(通常<=4cm或更短)高频(13.56M Hz)无线通信技术,可以让消费者简单直观地交换信息、访问内容与服务。
    2017-01-01
  • Kotlin中协程的创建过程详析

    Kotlin中协程的创建过程详析

    使用协程的专业开发者中有超过 50% 的人反映使用协程提高了工作效率,下面这篇文章主要给大家介绍了关于Kotlin中协程创建过程的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-01-01
  • Android 组件化神器之Arouter依赖配置使用

    Android 组件化神器之Arouter依赖配置使用

    这篇文章主要为大家介绍了Android 组件化神器之Arouter依赖配置使用,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • Android中PopupWindow弹出式窗口使用方法详解

    Android中PopupWindow弹出式窗口使用方法详解

    这篇文章主要为大家详细介绍了Android中PopupWindow弹出式窗口的使用方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-09-09

最新评论