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
暂无评论内容