为什么使用 Lambda 表达式,他是什么?
可以理解为 一段可以传递的代码,使代码更灵活,简洁。
Lambda表达式就是一个函数式接口的实例。他是对象,不是函数,必须依附于函数式接口。
jdk 1.8
/**4.lambda表达式的本质:做为函数式接口(@FunctionalInterface)的实例 5.如果一个接口中,只声明了一个抽象方法,则此接口就称为函数式接口 */所以以前用匿名实现类表示的现在可以用Lambda表达式来写。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0NdCBFHL-1603280733147)(C:\Users\Admin\AppData\Roaming\Typora\typora-user-images\image-20200614220119109.png)]
1.使用情境:当要传递给lambda体的操作,已经有实现的方法了,可以使用方法引用!
2.方法引用,本质是lambda表达式,而lambda表达式作为函数式接口的实例,所以方法引用,也就是函数式接口的实例。
3.使用格式:类(或者对象): : 方法名
4.具体分为如下的三种情况:
情况一: 对象 : : 非静态方法
情况二: 类 : : 静态方法
情况三: 类 : : 非静态方法
5.方法引用使用的要求:要求接口中的抽象方法的形参列表和返回值类型与方法引用的方法的形参列表和返回值类型相同!
public class MethodRefTest { //情况一:对象 :: 实例方法 //Consumer中的void accept(T t) //System.out中的void println(T t) //写法:out :: println; @Test public void test01(){ Consumer<String> consumer1 = str -> System.out.println(str); consumer1.accept("北京"); System.out.println("====================="); PrintStream out = System.out; Consumer<String> consumer2 = out ::println; consumer2.accept("南京"); } //情况二:类 :: 静态方法 //Comparator中的int compare(T t1,T t2) //Integer中的int compare(T t1,T t2) //写法:Integer::compare; @Test public void test02(){ Comparator<Integer> comparator2 = (o1,o2) -> Integer.compare(o1,o2); System.out.println(comparator2.compare(93,93)); System.out.println("======================="); Comparator<Integer> comparator3 = Integer::compare; System.out.println(comparator3.compare(99,93)); } //情况三:类 :: 实例方法(有难度) //Comparator中的int compareTo(T t1,T t2) //String中的int t1.compare(T t2) //写法:String :: compareTo; @Test public void test03() { Comparator<String> comparator2 = (o1, o2) -> o1.compareTo(o2); System.out.println(comparator2.compare("adb", "ade")); System.out.println("=========================="); Comparator<String> comparator3 = String :: compareTo; System.out.println(comparator3.compare("ado", "ade")); } }与方法引用类似:
和方法以用类似,函数式接口的抽象方法的形参列表和构造器的形参列表一致。
抽象方法的返回值类型即为构造器所属的类型
写法:例子:
Employee : : new ;
length -> new String[length];
omparator3.compare(“ado”, “ade”)); } }
## 3.构造器引用 与方法引用类似: 和方法以用类似,函数式接口的抽象方法的形参列表和构造器的形参列表一致。 抽象方法的返回值类型即为构造器所属的类型 写法:例子: Employee : : new ; ## 4.数组引用 length -> new String[length]; String[] :: new;