先简单说说lambda表达式:
(Type a, Type b, ...) -> {...}
左边是参数(参数类型可省略),如果只有一个参数括号也可以省略,右边是函数体和返回结果(大括号可省略)。
如:
int add(int a, int b){ return a + b;
}

可以写成 (a, b) -> a+b

以click为例,在kotlin中,匿名内部类可以:
view.setOnClickListener(object: OnClickListener{override fun onClick(view: View){toast("test")}
})

通过lambda简化为

(在kotlin中如果一个Interface包单个函数可以被替代为一个函数)
view.setOnClickListener({view -> toast("test")})    //用大括号将lambda匿名函数包围
如果左边的参数没有使用,也可以省略
view.setOnClickListener({ toast("test") })
如果函数的最后一个参数是一个函数,可以放在括号后面
view.setOnClickListener() { toast("test") }
如果函数只有一个参数,可以省略括号
view.setOnClickListener{ toast("test") }
1、it引用
另外一种情况当左边的参数被使用时,且函数只有这一个参数,如
view.setOnClickListener({ view -> toast(view.tag.toString()) })
这时候可以用it引用来代替这个参数,可直接简化为
view.setOnClickListener{ toast(it.tag.toString()) }
2、lambda匿名函数声明
var obj: (Type, Type, ...) -> Type
左边是参数类型,可以有多个但是括号不能省略。右边是返回类型,如果是空则是Unit。如:
setListener(var item: Item, var listener: (Item) -> Unit){view.setOnClickListener{ listener(item) }
}

注意:在这里应该是view.setOnClickListener{ view -> { listener(item) } },是在OnClickLisrener的OnClick函数中执行lisrener(item)的,但是由于view未使用所以可以继续简化成上面的样子

使用时:
setListener(item) { toast(it.name) }
注意:如果没有参数则 var obj: () -> Type,使用时不要传入参数,但是括号不能省略,如view.setOnClickListener{ listener() }
3、lambda函数不执行
使用匿名函数时一定要有括号,没有括号也不会报错,但是这个函数不会执行,如
setListener(var item: Item, var listener: (Item) -> Unit){view.setOnClickListener{ listener }
}

并不会报错,但是点击后不执行函数,一定要带上括号和参数,如view.setOnClickListener{ listener(item) }

kotlin学习笔记——lambda表达式相关推荐

  1. C++11 学习笔记 lambda表达式

    http://blog.csdn.net/fjzpdkf/article/details/50249287 lambda表达式是C++11最重要也最常用的一个特性之一.lambda来源于函数式编程的概 ...

  2. Java学习笔记---Lambda表达式及Stream流Api

    Lambda 特性: 允许把函数作为参数传递进方法. 前置条件: 必须是函数式接口---------->[函数式接口:满足以下三条1.接口中只有一个抽象方法.2.可以有默认实现的方法.3.可以有 ...

  3. Kotlin学习笔记(3)- 语法

    系列文章全部为本人的学习笔记,若有任何不妥之处,随时欢迎拍砖指正.如果你觉得我的文章对你有用,欢迎关注我,我们一起学习进步!kotlin学习笔记系列首发简书和CSDN Kotlin学习笔记(1)- 环 ...

  4. Kotlin学习笔记20 阶段复习2

    参考链接 示例来自bilibili Kotlin语言深入解析 张龙老师的视频 lambda表达式 内联函数 Kotlin学习笔记 第三章 函数 高阶函数 lambda表达式 内联函数_积跬步 至千里- ...

  5. Kotlin学习笔记19 阶段复习1

    参考链接 示例来自bilibili Kotlin语言深入解析 张龙老师的视频 基础部分 Kotlin学习笔记 第一章开始 第二章 基础_积跬步 至千里-CSDN博客 类与继承 Kotlin学习笔记 第 ...

  6. kotlin学习笔记——枚举、封闭类

    1.枚举 kotlin中提供类枚举的实现,与java相同.枚举可以带参数,如 enum Icon(val res: Int){MENU(R.drawable.menu),BACK(R.drawable ...

  7. Kotlin学习笔记(1)-- 基础语法

    文章目录 Kotlin学习笔记(1)-- 基础语法 输出 语法 代码 输出 可读可改(var) 语法 代码 输出 内置数据类型 只读变量(val) 类型推断 编译时常量 语法 代码 输出 引用类型 r ...

  8. Kotlin 学习笔记(四)—— 协程的基础知识,面试官的最爱了~

    又是一个月没见了,坚持永远是世上最难的事情,但,往往难事才会有更大的收获.与君共勉~ 前段时间一直在学习 Compose,所以导致 Kotlin 笔记系列搁置了好久.一方面是因为 Compose 的学 ...

  9. Kotlin学习笔记(一)

    文章目录 Kotlin学习笔记 变量申明 只读变量 类型推断 编译时常量 引用类型和基本数据类型 if表达式 when String 模板 函数头 函数参数 Unit函数 Nothing类型 反引号中 ...

最新文章

  1. 数据中心继续蓬勃发展的5个原因
  2. hdu 1176 dp 数塔问题
  3. mfc 窗体不可点击的原因_如何设计一个简单的Access登录窗体(2)
  4. 攻克视频AI界难题,直通芒果TV offer,这场算法大赛你一定不能错过
  5. 和flag_不怕立Flag,就怕没有Flag
  6. 毫秒级检测!你见过带GPU加速的树莓派吗?
  7. 64位内核开发第14将,路径的相互转换以及获取.
  8. 用python画糖葫芦_python学习记录六
  9. Centos7的iso everything与DVD以及Live的区别
  10. [论文阅读] Variational Adversarial Active Learning
  11. 循环控制语句转换为汇编
  12. 为何python不好找工作-Python这么火,为何有人说Python不好找工作?
  13. codeforces 665E Beautiful Subarrays
  14. 21天c语言 ppt,21天学通C语言 第1章 C语言与程序概述.ppt
  15. NVMe1.4 Admin Command学习(1)-- format identify
  16. 董事长、总裁、总经理的关系
  17. php 腾讯云 短信验证码发送
  18. Android面试:ActivityA与ActivityB相互跳转对应生命周期变化
  19. Android未找到分区,Android System分区文件丢失分析
  20. 用电脑键盘快速打出特殊符号!

热门文章

  1. JavaScript中setAttribute用法
  2. android listview源码--第一章RecycleBin
  3. 《智能家居》培训第五天------2019-01-09
  4. 沉浸式模式与沉浸式状态栏
  5. zk reconnect
  6. 用JavaScript实现100以内自然数求和
  7. InChatter系统开源聊天模块前奏曲
  8. 技术驱动还是产品驱动
  9. 效率极低人群的七大习惯你占了几项?
  10. C# Console类学习笔记