|名词定义|
Lambda表达式,也可称为闭包,它是推动Java8发布的最重要新特性。Lambda允许把函数作为一个方法的参数,它实质上是一个匿名方法,但该方法并非独立执行,而是用于实现由函数式接口定义的唯一抽象方法。
Lambda表达式的语法格式如下:
(parameters) -> expression
或
(parameters) ->{ statements; }
|特征|
- 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
- 可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
- 可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
- 可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值。
|Lambda表达式规约| - lambda表达式的参数可以通过上下文推断,如果需要显示声明一个参数的类型,则必须为所有的参数声明类型。
- lambda表达式中抛出的异常需要与目标函数式接口的抽象方法抛出的异常类型兼容。
- lambda表达式中的参数类型需要与目标函数式接口中抽象方法的参数类型兼容。
|Lambda表达式简单示例|
- 不需要参数,返回一个 5:
() -> 5 - 接收一个参数(数字类型),返回其2倍的值:
- -> 2 * x
- 接收2个参数(数字),并返回他们的差值:
(x, y) -> x – y - 接收2个int型整数,返回他们的和:
(int x, int y) -> x + y - 接收一个 string 对象,并在控制台打印,不返回任何值:
(String s) -> System.out.print(s)
|常见操作|
- 用lambda表达式实现Runnable
- 用lambda表达式进行事件处理
- 用lambda表达式对列表进行迭代
- 结合函数式接口Predicate使用lambda表达式
- 在Map和Reduce中使用lambda表达式
- 通过过滤创建String列表
- 对列表的每个元素应用函数
- 复制不同的值,创建一个子列表
- 计算集合元素的各种数值数据
|参考资料|
[1] https://www.cnblogs.com/gu-bin/p/11225749.html
[2] https://www.runoob.com/java/java8-lambda-expressions.html
[3] https://www.cnblogs.com/coprince/p/8692972.html