方法引用:若lambda体中的内容有方法已经实现了,我们可以使用”方法引用“
(可以理解为方法引用是lambda表达式的另一种表现形式)
主要有三种语法格式:
1、对象::实例方法名
2、类::静态方法名
3、类::实例方法名
方法引用:对象::实例方法名
需要注意的是:方法引用的方法的 参数和返回值 必须和函数式接口的方法的参数和返回值一致
public class TestMethodRef {
public static void main(String[] args) {
PrintStream ps = System.out;
//原始方法
Consumer<String> con = (str)->System.out.println(str);
//改进
Consumer<String> con1 = (str) -> ps.println(str);
//方法引用
/**
* 需要注意的是方法引用的方法的 参数和返回值 必须和函数式接口的方法的参数和返回值一致
*/
Consumer<String> con2 = ps::println;
//改进
Consumer<String> con3 = System.out::println;
con.accept("123");
con1.accept("123");
con2.accept("123");
con3.accept("123");
}
}
***********************************************************
123
123
123
123
Process finished with exit code 0
image.png
方法引用:类::静态方法名
System.out.println("*****************2、类::静态方法名******************");
Comparator<Integer> com = (x,y) -> Integer.compare(x,y);
Comparator<Integer> com1 = Integer::compare;
System.out.println(com.compare(3, 2));
System.out.println(com1.compare(1, 2));
System.out.println(com1.compare(2, 2));
*************************************************
1
-1
0
方法引用:类::实例方法名
注意:该方法的使用的规则:第一个参数必须是方法的调用者,第二个参数必须是方法的参数。
System.out.println("*****************3、类::实例方法名******************");
BiPredicate<String,String> bp = (x,y) -> x.equals(y);
//注意:该方法的使用的规则:第一个参数必须是方法的调用者,第二个参数必须是方法的参数。
BiPredicate<String,String> bp1 = String::equals;
System.out.println(bp.test("123","123"));
System.out.println(bp1.test("1234","123"));
***************************************
true
false
网友评论