java方法引用是什么

1、说明

方法引用可以看作是Lambda表达式的深层表达。换句话说,方法引用是Lambda表达式,也就是函数接口的例子,通过方法名称指向方法。

2、使用场景

当要传递给 Lambda 体的操作,已经实现的方法了,可以使用方法引用

3、格式

类(或对象)::方法名

4、实例

publicclassMethodRefTest{
//情况一:对象::实例方法
//Consumer中的voidaccept(Tt)
//PrintStream中的voidprintln(Tt)
@Test
publicvoidtest1(){
//使用Lambda表达
Consumer<String>con1=str->System.out.println(str);
con1.accept("中国");
System.out.println("====================");
//使用方法引用
PrintStreamps=System.out;
Consumercon2=ps::println;
con2.accept("China");
}
//Supplier中的Tget()
//Employee中的StringgetName()
@Test
publicvoidtest2(){
//使用Lambda表达
Employeeemp=newEmployee(1001,"Bruce",34,600);
Supplier<String>sup1=()->emp.getName();
System.out.println(sup1.get());
System.out.println("====================");
//使用方法引用
Suppliersup2=emp::getName;
System.out.println(sup2.get());
}
//情况二:类::静态方法
//Comparator中的intcompare(Tt1,Tt2)
//Integer中的intcompare(Tt1,Tt2)
@Test
publicvoidtest3(){
//使用Lambda表达
Comparator<Integer>com1=(t1,t2)->Integer.compare(t1,t2);
System.out.println(com1.compare(32,45));
System.out.println("====================");
//使用方法引用
Comparator<Integer>com2=Integer::compareTo;
System.out.println(com2.compare(43,34));
}
//Function中的Rapply(Tt)
//Math中的Longround(Doubled)
@Test
publicvoidtest4(){
//使用匿名内部类
Function<Double,Long>func=newFunction<Double,Long>(){
@Override
publicLongapply(DoubleaDouble){
returnMath.round(aDouble);
}
};
System.out.println(func.apply(10.5));
System.out.println("====================");
//使用Lambda表达式
Function<Double,Long>func1=d->Math.round(d);
System.out.println(func1.apply(12.3));
System.out.println("====================");
//使用方法引用
Function<Double,Long>func2=Math::round;
System.out.println(func2.apply(12.6));
}
//情况三:类::实例方法
//Comparator中的intcomapre(Tt1,Tt2)
//String中的intt1.compareTo(t2)
@Test
publicvoidtest5(){
//使用Lambda表达式
Comparator<String>com1=(s1,s2)->s1.compareTo(s2);
System.out.println(com1.compare("abd","aba"));
System.out.println("====================");
//使用方法引用
Comparator<String>com2=String::compareTo;
System.out.println(com2.compare("abd","abc"));
}
//BiPredicate中的booleantest(Tt1,Tt2);
//String中的booleant1.equals(t2)
@Test
publicvoidtest6(){
//使用Lambda表达式
BiPredicate<String,String>pre1=(s1,s2)->s1.equals(s2);
System.out.println(pre1.test("abc","abc"));
System.out.println("====================");
//使用方法引用
BiPredicate<String,String>pre2=String::equals;
System.out.println(pre2.test("abc","abd"));
}
//Function中的Rapply(Tt)
//Employee中的StringgetName();
@Test
publicvoidtest7(){
//使用Lambda表达式
Employeeemployee=newEmployee(1001,"Tom",45,10000);
Function<Employee,String>func1=e->e.getName();
System.out.println(func1.apply(employee));
System.out.println("====================");
//使用方法引用
Function<Employee,String>func2=Employee::getName;
System.out.println(func2.apply(employee));
}
}
原文来自:https://www.py.cn
© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容