语法
Lambda 表达式的一般语法如下:
(parameters) -> expression
parameters:表示 lambda 表达式所需的参数,可以为空。
expression:表示 lambda 表达式的执行体,它可以包含任意 Java 表达式。
类型推断
Java 编译器能够自动推断 lambda 表达式的类型,因此无需显式指定类型。例如,下例中 lambda 表达式的类型推断为 ()->int:
() -> 42
表达式体
lambda 表达式的表达式体可以是任意 Java 表达式。它可以包含语句块(用大括号 {} 括起来)或单个表达式。
示例
以下是一些 lambda 表达式的示例:
无参数,返回 42:
() -> 42
单参数,返回参数的两倍:
(x) -> x * 2
多个参数,返回两个参数的和:
(x, y) -> x + y
带语句块的表达式体:
(x) -> {
int y = x * 2;
return y;
}
函数式接口
Lambda 表达式通常用于实现函数式接口,即只包含一个抽象方法的接口。Java 中提供了许多内置的函数式接口,例如 Runnable、Callable 和 Predicate。
优势
lambda 表达式提供了以下优势:
简洁性:lambda 表达式通常比传统的匿名内部类更简洁。
可读性:lambda 表达式的语法更具可读性,使代码更容易理解。
表达力:lambda 表达式允许使用箭头符号(->)来表示输入和输出,从而提高了代码的可表达性。
模块性:lambda 表达式可以作为独立的代码块,使代码更容易重用。
并发性:lambda 表达式可以轻松用于并发编程中,例如在并行流中。
应用
lambda 表达式广泛应用于各种场景,包括:
事件处理:用于处理 GUI 事件或网络请求。
数据处理:用于过滤、映射和规约数据集合。
并发编程:用于创建和管理线程池或并行任务。
测试:用于创建测试用例和验证器。
工具:用于创建自定义工具或库,例如日志记录框架或数据验证器。