无参Lambda表达式必须写空括号(),如() -> System.out.println("启动任务");多参必须用括号包裹并逗号分隔,如(a, b) -> a + b;仅能用于函数式接口,常见内置接口包括Runnable、Supplier、BiFunction等。

无参 Lambda 表达式怎么写
当函数式接口的方法不接收任何参数时,Lambda 写法固定以空括号 () 开头,后跟箭头 -> 和执行逻辑。
- 如果只有一条语句,可省略大括号和分号,例如:() -> System.out.println("启动任务")
- 如果有多条语句,必须用大括号包裹,并按需使用 return(仅当接口方法有返回值时):() -> { System.out.print("准备"); System.out.println("完成"); }
- 典型使用场景是 Runnable 接口:new Thread(() -> System.out.println("线程运行中")).start();
多参 Lambda 表达式怎么写
多个参数必须用小括号包裹,参数之间用逗号分隔,类型通常可省略(编译器能从函数式接口推断)。
- 基础格式为:(a, b) -> a + b(如用于 BinaryOperator 或 Comparator)
- 显式声明类型时,每个参数都要带类型,例如:(String s, int n) -> s.repeat(n)
- 不能省略括号——即使只有一个参数可省,多个参数时括号是强制的
- 常见例子:(s1, s2) -> s1.length() - s2.length()(用于排序),或 (x, y, z) -> x * y + z(需自定义三参数函数式接口)
哪些接口支持这些写法
Lambda 只能赋值给函数式接口(有且仅有一个抽象方法)。Java 自带的常用接口已覆盖多数情况:
-
无参:用 Supplier
(T get())或 Runnable(void run()) -
双参:用 BiFunction
(R apply(T,U))、BiPredicate 或 Comparator - 不需要自己定义接口,直接导入 java.util.function 包里的类型即可
容易出错的细节
写错括号、类型或语句结构会导致编译失败,注意这几个关键点:
立即学习“Java免费学习笔记(深入)”;
- 无参必须写 (),不能留空或写 x -> ...
- 多参必须加括号,a, b -> ... 是非法语法
- 语句块里有 return 时,返回类型必须和接口方法声明一致
- 引用外部变量时,该变量需是事实上的 final(不能在 Lambda 外被重新赋值)


















