什么是方法引用
方法引用是用来简化lambda表达式的,比lambda更加简化抽象
使用方法引用的前提
前提 : 当lambda体的实现是通过调用另外一个方法实现的,可以通过方法引用直接引用这个方法,用来简化完整的lambda表达式的结构
方法引用的要求
两种情况满足一个就可以
1.lambda的参数列表与返回值要求能够一一对应lambda体中所引用方法的参数列表与返回值
2.lambda的返回值要求与所引用方法的返回值保持对应一致【这一条两种情况也是满足一个就可以】lambda的参数列表如果只有一个参数 : 作为调用所引用的成员方法的对象存在 lambda的参数列表如果存在多个参数 : 第一个参数作为调用所引用的成员方法的对象存在,lambda的第二个参数开始,一一对应匹配所引用方法的参数列表
方法引用的语法
对象::实例方法
类名::静态方法
类名::实例方法
方法引用使用的代码Demo
public class Class002_MethodQuote {
//类名::实例方法
public static void test3(){
///判断 : 1)lambda体的实现是通过调用另外一个方法实现的 ->√ equals 2)lambda的返回值要求与所引用方法的返回值保持对应一致,lambda的参数列表如果存在多个参数 : 第一个参数作为调用成员方法的对象存在,lambda的第二个参数开始,匹配所引用方法的参数列表 ->对
//BiPredicate<String,String> pre = (x,y) -> x.equals(y);
BiPredicate<String,String> pre = String::equals;
System.out.println(pre.test(new String("nihao"),"nihao"));;
}
//类名::静态方法
public static void test2(){
//Comparator<Integer> com = (x,y) -> x-y; //不能通过方法引用,因为-是四则运算,不是方法的调用
//判断 : 1)lambda体的实现是通过调用另外一个方法实现的->√ compare 2)lambda的参数列表与返回值要求能够一一对应lambda体中所引用方法的参数列表与返回值 √
//Comparator<Integer> com = (x,y) -> Integer.compare(x,y);
Comparator<Integer> com = Integer::compare;
System.out.println(com.compare(100,101));;
}
//对象::实例方法
public static void test1(){
List<Integer> list = List.of(1,2,3,4,5);
//判断 : 1)lambda体的实现是通过调用另外一个方法实现的->√ println 2)lambda的参数列表与返回值要求能够一一对应lambda体中所引用方法的参数列表与返回值 √
PrintStream ps = System.out;
//Consumer con = i -> System.out.println(i);
//Consumer con = i -> ps.println(i);
Consumer con = ps::println;
list.forEach(con);
list.forEach(ps::println);
list.forEach(System.out::println);
}
}