一、方法引用:若lambda体中的内容有方法已经实现,我们可以使用“方法引用”。
可以理解为方法引用是lambda表达式的另一种表达形式。
主要有三种语法格式
方法一 : 对象::实例方法名
方法二 : 类::静态方法名
方法三 : 类::实例方法名
- 注意
1、Lambda 体中的调用方法的参数列表与返回值类型,要与函数式接口中抽象方法的函数列表和返回值类型保持一致!
2、若 Lambda 参数列表的第一个参数是实例方法的调用者,而第二个参数是实例方法的参数时,可以使用classname :: method
二、构造器
classname::new - 注意:需要调用的构造器的参数列表要与函数式的抽象方法的参数列表保持一致
对象::实例方法名
Student stu = new Student();
public void test1(){
Supplier<String> sup1 =stu::getName;
// Supplier<Integer> sup=() ->stu.getAge();
}
类::静态方法名
public void test2(){
Comparator<Integer> com=Integer::compare;
int compare = com.compare(39, 6);
System.out.println(compare);
}
类::实例方法名
比较两个参数值的比较
public void test3(){
BiPredicate<String,String> bp=(x,y)->x.equals(y);
//第一个参数是实例方法的调用者,第二个参数是这个方法的参数时,可以使用类::实例方法名
//左边的参数个数和数据类型与后边相同时,并且返回值类型相同是可以使用方法引用
BiPredicate<String,String> bp1=String::equals;
boolean test = bp1.test("asd", "asd");
System.out.println(test);
}
构造器引用
Supplier<Student> sup1=Student::new;
Student student = sup1.get();
// 这里是调用的无惨构造方法,因为Supplier的get()无惨
// 左右两边必一致