lambda表达式需要“函数式接口”的支持 。接口中只有一个抽象方法的接口称为函数式接口
可以使用注解@FunctionalInterface修饰, 可以检查是否是函数式接口
java8内置得4大核心函数式接口:
一、Consumer<T>:消费型接口 void accept(T t)
二、Supplier<T>:供给型接口 T get()
三、Function<T, R>:函数型接口 R apply(T t)
四、Predicate<T>:断言型接口 boolean test(T t)
还有其他接口请参考javaAPI,如果找不到满足要求的接口,可以自己定义。
左侧:Lambda表达式的参数列表(数据类型可以不写,JVM编译器会通过上下文推断数据类型,即“类型推断”)
右侧:Lambda表达式中需要执行的功能,即Lambda体
语法格式1:
// 左侧无参数,右侧无返回值
() -> System.out.println("Lambda");
语法格式2:
// 左侧 只有有一个参数,右侧 无返回值 (name) -> System.out.println(name); // 左侧 只有一个参数,右侧 参数可以不加括号 name -> System.out.println(name);
语法格式3:
// 左侧大于一个参数,右侧 有返回值,且Lambda体中有多条语句
Comparator<Interger> com = (x,y) -> { System.out.println("Lambda函数式接口") return Integer.compare(x,y); }
语法格式4:
// 右侧Lambda体中只有一条语句,return和大括号都可以不写
Comparator<Interger> com = (x,y) -> Integer.compare(x,y);