Lambda表达式的基础语法:
Lambda表达式需要“函数式接口”的支持;
函数式接口:接口中只有一个抽象方法的接口,称为函数式的接口,可以使用注解@FunctionalInterface 修饰,用来检查是否是函数式接口
Java8引入的一个新的操作符 “->” 该操作符成为箭头操作符或者Lambda操作符,该操作符将Lam表达表达式分为两个部分:
左侧:Lambda 表达式的参数列表    ->   右侧:Lambda 表达式中所需执行的功能  即Lambda体
Lambda的语法格式
语法格式一:无参数,无返回值
1  | Runnable rb = new Runnable()  | 
语法格式二:有一个参数,无返回值 ,如果有一个参数,参数的括号可以不写
1  | Consumer<String> com = (x) -> System.out.println(x);  | 
语法格式三:有两个以上的参数,有返回值,并且Lambda体中有多条语句,多条语句用{}括起来
1  | Comparator<Integer> com = (x,y) -> {  | 
语法格式四:若Lambda体中只有一条语句,return 和 大括号都可以不写
1  | Comparator<Integer> com = (x,y) -> Integer.compare(x,y);  | 
语法格式五:Lambda表达式的参数列表的数据类型可以写,因为JVM编译器可以根据上下文推断出参数的数据类型,即“类型推断”
Java8 内置的四大核心函数式接口
1  | Consumer<T>:消费型接口  | 
方法引用:如果Lambda 体中的有方法已经实现了,我们可以使用“方法引用”(可以理解为方法引用是Lambda表达式的另一种表现形式)
三种语法格式:对象::实例方法名  类::静态方法名    类::实例方法名 
引用方法的参数列表和返回值要和函数式接口的一致
如果Lambda参数列表中的第一个参数时实例方法的调用者,而第二个参数时实例方法的参数时,可以使用ClassName::MethodName( 类 : : 实例方法名)
1  | //对象::实例方法名  | 
构造器引用  格式:ClassName::new
需要调用的构造器的参数列表要与函数式接口中抽象方法的参数列表保持一致
1  | public class Person  | 
数组引用:Type[]::new
1  | Function<Integer,String[]> fun5 = (x) -> new String[x];  |