多参数lambda表达式必须用括号包裹参数列表,格式为(param1, param2, ..., paramn) -> {函数体}或->表达式;参数类型可省略但需编译器能推导;显式声明类型时须全写且括号不可省;常见错误包括漏括号、混用类型声明、参数名重复等。

Lambda 表达式支持多个参数,写法和单参数类似,但需用括号包裹参数列表,再跟箭头 -> 和函数体。
多参数 Lambda 的基本语法
格式为:(param1, param2, ..., paramN) -> { 函数体 } 或 (param1, param2, ...) -> 表达式(单表达式可省略大括号和 return)。
- 参数类型通常可省略,由编译器自动推导(前提是函数式接口已明确类型)
- 若所有参数类型都省略,必须加括号;即使只有一个参数,多参数时括号不可省
- 函数体若只有一条返回语句,可省略 return 和大括号;否则必须用大括号并显式 return
常见使用场景示例
以 Java 中的 BiFunction
BiFunction<integer string boolean> check = (num, str) -> num > 0 && str != null && str.length() > num;</integer>
调用:check.apply(3, "hello") → 返回 true。
- 也可用于 Comparator
:(s1, s2) -> s1.length() - s2.length() - 或用于 BinaryOperator
:(a, b) -> a * 0.8 + b * 0.2
带类型声明的写法(必要时)
当编译器无法推断类型,或想增强可读性,可以显式写出参数类型:
(String name, int age) -> { System.out.println(name + " is " + age + " years old."); return age > 18; }
- 每个参数前都要加类型,类型与参数名之间用空格分隔
- 此时括号不能省,即使只有两个参数也必须写全
- 注意:类型声明后,就不能靠上下文“猜”了,必须严格匹配目标函数式接口
注意事项和易错点
多参数 Lambda 看似简单,但几个细节容易出错:
- 漏掉括号:写成 name, age -> ... 是非法语法,必须是 (name, age) -> ...
- 混用类型推导和显式声明:不能一半写类型、一半不写,如 (String name, age) -> ... 编译失败
- 参数名重复:(x, x) -> x + x 不合法,参数名必须唯一
- 空参数列表要写成 () -> ...,不能省略括号











