【Kotlin】

Lambda 就是一小段可以作为参数传递的代码。

因为正常情况下,我们向某个函数传参时只能传入变量,而借助Lambda 却允许传入一小段代码。

Lambda 表达式的语法结构:

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

首先,最外层是一对大括号。

如果有参数传入到 Lambda 表达式中的话,我们还需要声明参数列表,参数列表的结尾使用一个->符号,表示参数列表的结束以及函数体的开始。

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

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

例子:

val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape", "Watermelon") val lambda = {
    fruit: String -> fruit.length }
val maxLengthFruit = list.maxBy(lambda)

maxBy就是一个普通的函数而已,只不过它接收的是一个Lambda 类型的参数,并且会在遍历集合时将每次遍历的值作为参数传递给Lambda 表达式。工作原理是根据我们传入的条件来遍历集合,从而找到该条件下的最大值,比如说想要找到单词最长的水果, 那么条件自然就应该是单词的长度了。

所以人话是:maxBy遍历集合list,将item作为“参数”传入Lambda表达式。条件是:fruit.length

简化过程:

// 不需要专门定义一个lambda变量
val maxLengthFruit = list.maxBy({
    fruit: String -> fruit.length })

// 当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 }
public interface Runnable {
   
	void run(); 
}

new Thread(new Runnable() {
    
	@Override
    public void run() {
   
		System.out.println("Thread is running"); 
	}
}).start();
Thread(object : Runnable {
    
	override fun run() {
   
		println("Thread is running") 
	}
}).start()

相关推荐

  1. Kotlin

    2023-12-08 21:22:04       40 阅读
  2. kotlin ——数组

    2023-12-08 21:22:04       42 阅读
  3. Kotlin

    2023-12-08 21:22:04       33 阅读
  4. Kotlin 接口

    2023-12-08 21:22:04       34 阅读
  5. kotlin-运算符

    2023-12-08 21:22:04       43 阅读
  6. Kotlin-数组

    2023-12-08 21:22:04       36 阅读
  7. Kotlin Async

    2023-12-08 21:22:04       33 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-08 21:22:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-08 21:22:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-08 21:22:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-08 21:22:04       18 阅读

热门阅读

  1. 真正理解面向对象、面向过程编程

    2023-12-08 21:22:04       38 阅读
  2. springboot集成字典注解

    2023-12-08 21:22:04       41 阅读
  3. 用stl写一个自动打分比赛的案例

    2023-12-08 21:22:04       37 阅读
  4. cmake编译数据库

    2023-12-08 21:22:04       39 阅读
  5. arXiv学术速递笔记12.8

    2023-12-08 21:22:04       27 阅读
  6. 【数据结构】链表算法总结

    2023-12-08 21:22:04       38 阅读
  7. GO设计模式——10、组合模式(结构型)

    2023-12-08 21:22:04       25 阅读
  8. 【工具】机器之间传输文件的常用方式

    2023-12-08 21:22:04       37 阅读