Kotlin?lambda表达式入门指南

 更新时间:2024年03月01日 10:19:08   作者:Nimrod__  
在kotlin当中,Lambda表达式是最高等级的,Lambda表达式可以理解为一种匿名函数,是一种高效的类似于函数式编程的表达式,本文介绍Kotlin?lambda表达式入门指南,感兴趣的朋友一起看看吧
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

概述

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互联网访问图片并在客户端显示的方法

    Android互联网访问图片并在客户端显示的方法

    这篇文章主要介绍了Android互联网访问图片并在客户端显示的方法,结合实例分析了Android处理图片的技巧,并附带了Android的URL封装类,网络连接封装类与输出流封装类,需要的朋友可以参考下
    2015-12-12
  • Android实现数字跳动效果的TextView方法示例

    Android实现数字跳动效果的TextView方法示例

    数字跳动效果相信大家应该都见过,在开发加上这种效果后会让ui交互看起来非常不错,所以下面这篇文章主要给大家介绍了Android实现数字跳动的TextView的相关资料,文中给出了详细的示例代码,需要的朋友可以参考学习,下面来一起看看吧。
    2017-04-04
  • Android单项绑定MVVM项目模板的方法

    Android单项绑定MVVM项目模板的方法

    这篇文章主要给大家介绍了关于Android单项绑定MVVM项目模板的相关资料,文中通过示例代码介绍的非常详细,对各位Android开发者们具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-04-04
  • android异步任务设计思详解(AsyncTask)

    android异步任务设计思详解(AsyncTask)

    AsyncTask在Android十分常用,那为什么如此常用呢,不用行不行呢,内部又是怎么实现的呢,为什么Java的API中没有这个类呢,看完本文后,你将会知道答案
    2014-02-02
  • Android抽屉布局DrawerLayout的简单使用

    Android抽屉布局DrawerLayout的简单使用

    这篇文章主要为大家详细介绍了Android抽屉布局DrawerLayout的简单使用,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • Android使用Handler实现下载文件功能

    Android使用Handler实现下载文件功能

    这篇文章主要为大家详细介绍了Android使用Handler实现下载文件功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • Android利用方向传感器获得手机的相对角度实例说明

    Android利用方向传感器获得手机的相对角度实例说明

    下面以实例向大家介绍喜爱Android利用方向传感器获得手机的相对角度,不了解的朋友可以参考下
    2013-06-06
  • 详解Android使用Handler造成内存泄露的分析及解决方法

    详解Android使用Handler造成内存泄露的分析及解决方法

    这篇文章主要介绍了详解Android使用Handler造成内存泄露的分析及解决方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • ijkplayer打包支持https的so使用详解

    ijkplayer打包支持https的so使用详解

    这篇文章主要为大家介绍了ijkplayer打包支持https的so使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • Android实现屏幕保持常亮功能

    Android实现屏幕保持常亮功能

    这篇文章主要为大家详细介绍了Android实现屏幕保持常亮功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01

最新评论

?


http://www.vxiaotou.com