6.2.1 为什么引入 lambda 表达式

lambda 是可以传递的代码块.

偷笑, Go 中的函数是一等公民.

6.2.2 lambda 表达式的语法

image.png

image.png

没有参数仍要写 ():

image.png

自动推断类型:

image.png

参数只有一个并且类型可推导时, 可省略 ():

image.png

自动推导返回值类型

  • 必须有返回值

6.2.3 函数式接口

只有一个方法的接口.

image.png

通过泛型接口来保存 lambda 表达式:

image.png

6.2.4 方法引用

传递方法:

  1. var timer = new Timer(1000, System.out::println);

赋值时自动生成对象:

  1. Runnable task = System.out::println;

6.2.5 构造器引用

image.png

数组的构造器引用:

  1. int[]::new

6.2.6 变量作用域

不能在 lambda 中更改自由变量的值:

  • start

image.png

不能引用会变化的自由变量:

  • i

image.png
image.png

lambda 捕获变量的规则:

  • 变量是事实最终变量

lambda 内的作用域与其所在作用域是同一个作用域:

image.png

this 是 lambda 所在的对象的:

image.png

6.2.7 处理 lambda 表达式

6.2.8 再谈 Comparator