Java 中的 Lambda 表达式的基本结构如下:
(参数列表) -> { 方法体 }
形式 | 示例 | 说明 |
---|---|---|
无参数 | () -> System.out.println("Hi") |
没有参数,执行一个语句 |
一个参数 | x -> x * x |
一个参数可以省略括号 |
多个参数 | (a, b) -> a + b |
多个参数要加括号 |
有方法体 | (a, b) -> { int c = a + b; return c; } |
多条语句时需要大括号和 return |
解析:
参数:s
方法体:System.out.println(s)
等价于实现 Consumer
接口中的 accept(T t)
方法。
相当于写了:
list.forEach(new Consumer() {
public void accept(String s) {
System.out.println(s);
}
});
(x, y) -> x + y
解析:
参数列表是两个:x
, y
方法体是一个表达式:x + y
用于实现 BiFunction
接口中的 apply(x, y)
方法。
示例 3:
() -> 42
解析:
无参数
返回值为 42
实现的是 Supplier
接口中的 get()
方法
Lambda 表达式必须用于函数式接口的上下文中(即接口中只允许一个抽象方法)。
@FunctionalInterface
interface MyFunction {
int operate(int a, int b);
}
然后我们就可以这样写:
MyFunction add = (a, b) -> a + b;
System.out.println(add.operate(3, 5)); // 输出