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动态模糊效果

    教你快速实现Android动态模糊效果

    相信大家都发现了越来越多的App里面使用了模糊效果,比如雅虎天气的界面,虽然我并不知道雅虎天气是怎么做出这种效果的,但是简单的模仿一下的话,还是能做到的。下面一起来学习学习。
    2016-08-08
  • Android实现模拟搜索功能

    Android实现模拟搜索功能

    这篇文章主要为大家详细介绍了Android实现模拟搜索功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • Android输入框控件ClearEditText实现清除功能

    Android输入框控件ClearEditText实现清除功能

    这篇文章主要为大家详细介绍了Android输入框控件ClearEditText实现清除功能,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • Android绘图之Paint的使用方法详解

    Android绘图之Paint的使用方法详解

    这篇文章主要给大家介绍了关于Android绘图之Paint使用的相关资料,文中通过示例代码介绍的非常详细,并给大家介绍了DrawText 基线确定的方法,需要的朋友可以参考借鉴,下面随着小编来一些学习学习吧。
    2017-11-11
  • Android学习笔记——Menu介绍(二)

    Android学习笔记——Menu介绍(二)

    这次将继续上一篇文章没有讲完的Menu的学习,上下文菜单(Context menu)和弹出菜单(Popup menu)
    2014-10-10
  • Android入门教程之创建样式与主题

    Android入门教程之创建样式与主题

    通过这篇文章你将学到如何创建自定义的样式和主题,并且你还能学到如何使用Android Studio的工具和快捷方式来加快样式的创建。下面来一起看看吧。
    2016-08-08
  • 学习Android开发之RecyclerView使用初探

    学习Android开发之RecyclerView使用初探

    Android开发学习之路的第一课RecyclerView使用初探,感兴趣的小伙伴们可以参考一下
    2016-07-07
  • Android日志文件的读写工具类

    Android日志文件的读写工具类

    这篇文章主要为大家详细介绍了Android日志文件的读写工具类,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • Android中实现地址栏输入网址能浏览该地址网页源码并操作访问网络

    Android中实现地址栏输入网址能浏览该地址网页源码并操作访问网络

    Android中实现地址栏输入网址能浏览该地址网页源码的效果,想必有很多朋友都不清楚吧,下面为大家详细介绍下
    2013-06-06
  • 详解adb工具的基本使用

    详解adb工具的基本使用

    adb全称Android Debug Bridge,是Android SDK中的一个工具, 使用adb可以直接操作管理Android模拟器或者真实的Andriod设备,就是起到调试桥的作用,这篇文章主要介绍了adb工具的基本使用,需要的朋友可以参考下
    2022-08-08

最新评论