一、Lambda表达式
- 一般格式:
(参数类型 形参名,...) -> { 代码逻辑块 }
说明:
- 小括号内的语法与传统方法参数列表一致:无参数则留空;多个参数则用逗号分隔。
-
->
是新引入的语法格式,代表指向动作。 - 大括号内的语法与传统方法体要求基本一致。
-
Lambda表达式省略写的规则【要省略,必须都得省略】
- 小括号内参数的类型可以省略;
- 如果小括号内有且仅有一个参,则小括号可以省略;
- 如果大括号内有且仅有一个语句,则无论是否有返回值,都可以省略大括号、return关键字及语句分号。
(a, b) -> b - a
Lambda的使用前提
使用Lambda必须具有接口,且要求接口中有且仅有一个抽象方法。无论是JDK内置的 Runnable 、 Comparator 接口还是自定义的接口,只有当接口中的抽象方法存在且唯一时,才可以使用Lambda。
使用Lambda必须具有上下文推断。也就是方法的参数或局部变量类型必须为Lambda对应的接口类型,才能使用Lambda作为该接口的实例。
有且仅有一个抽象方法的接口,称为“函数式接口”。
Lambda表达式能访问当前调用位置的作用域 如下演示:
import java.util.HashMap;
public class Main {
interface Lambda<K, V>{
V printMsg(K a, K b);
}
public static void main(String[] args) {
HashMap<Integer, String> map = new HashMap<>();
map.put(1, "天王盖地虎,");
map.put(2, "宝塔镇河妖");
test(1, 2, (a, b) -> map.get(a) + map.get(b));
}
public static void test(Integer n, Integer m, Lambda<Integer, String> lambda) {
System.out.println(lambda.printMsg(n, m));
}
}