1.函数式编程思想

        Java是使用的是面向对象的编程思想,强调通过对象的形式来做事情;而函数式编程思想则尽量避免面向对象的复杂语法,而是强调做什么,而不是以什么形式去做。
        Lambda表达式就是函数式思想的体现。

2.Lambda的标准格式

(1)组成Lambda表达式的三要素:形参、箭头、代码块。
(2)格式:
(形参)->{代码块}
形参:如果有多个形参,用逗号隔开;没有形参就留空;
->:代表指向动作;
代码块:相当于方法体里的内容,实现的是接口里抽象方法的功能。 
(3)Lambda表达式使用前提
    1)有一个接口;
    2)该接口有且只有一个抽象方法(即函数式接口)。
【tips】:接口里的方法都是抽象方法,默认public abstract修饰。

3.Lambda的省略格式

(1)参数的类型可以省略;
(2)只有一个参数()可以省略;
(3)当代码块里只有一条语句时{}和该语句的“;”可以省略;如果该语句时return语句,那么return也要省略。

4.Lambda表达式和匿名内部类的区别

(1)所需类型不同:
        匿名内部类:接口、抽象类、具体类都行;
        Lambda表达式:只能是接口。
(2)使用限制不同:
        如果接口中有且只有一个抽象方法,二者都可以使用;
        如果接口中有多个抽象方法,只能用匿名内部类。(Lambda的使用前提)
(3)实现原理不同:
        匿名内部类:编译后会产生一个.class字节码文件
        Lambda表达式:编译后不产生.class字节码文件,对应的字节码文件会在运行时动态生成

5.方法引用

(1)方法引用符::
(2)可以把Lambda表达式用方法引用改写:
//Lambda表达式
usePrintable(s -> System.out.println(s));

//用方法引用改写
usePrintable(System.out::println);
分析:Lambda表达式:拿到参数s后通过Lambda表达式传递给System.out.println方法;
           方法引用:直接使用System.out中的println方法来代替Lambda表达式。

6.Lambda表达式支持的方法引用

(1)引用类方法:
    1)引用类方法引用的是类的静态方法
    2)格式:
//格式
类名::静态方法名

//范例
Integer::parselnt
【tips】:Lambda表达式被引用类方法代替时,前者的形参全都传递给类的静态方法的形参。
(2)引用类的实例方法
    1)引用类的实例方法,其实就是引用类中的成员方法
    2)格式:
//格式
类名::成员方法

//范例
String::subString
【tips】:Lambda表达式被引用类的实例方法代替时,前者的第一个形参作为调用者,其余形参全都传递给类的成员方法的形参。
(3)引用对象的实例方法
    1)引用对象的实例方法,其实就是引用该对象所属类中的成员方法
    2)格式:
//格式
对象名::成员方法

//范例
"Hello World".toUpperCase
【tips】:Lambda表达式被引用对象的实例方法代替时,前者的形参全都传递给类的成员方法的形参。
(4)引用构造器
    1)引用构造器,其实就是引用类的构造方法
    2)格式:
//格式
类名::new
    
//范例
Student::new
【tips】:Lambda表达式被引用类的构造方法代替时,前者的形参全都传递给类的构造方法的形参。