Lambda表达式
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表达式被引用类的构造方法代替时,前者的形参全都传递给类的构造方法的形参。