Java8新特性之方法引用的使用方法

  介绍

这篇文章主要讲解了“Java8新特性之方法引用的使用方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java8新特性之方法引用的使用方法”吧!

一前言

日常开发中,经常使用到λ表达式,例如:

public  static  void  main (String [], args), {   ,List list =, arrays . aslist(1, 5日,10日,4日,2);   ,//打印列表中的每一个数字   ,list.forEach ((x),→, System.out.println (x));   }

其中(x)→System.out.println (x)就是使用的λ表达式.Lambda表达式可以分为三部分:

<李>

左括号:λ的形参列表,对应接口的抽象方法的形参列表。

<李>

箭头:λ的操作符,可以理解为参数列表和λ体的分隔符。

<李>

λ体:即对应接口中的抽象方法的实现方法体。

你是否发现,上述例子的λ表达式的λ体仅仅调用一个已存在的方法,而不做任何其它事。对于这种情况,通过一个方法名字来引用这个已存在的方法会更加清晰。所以,方法引用应运而生,方法引用是一个更加紧凑,易读的λ表达式,它是λ表达式的另外一种表现形式,方法引用的操作符是双冒号::。

使用了方法引用,上述例子编写如下,变得更加紧凑,易读了。

public  static  void  main (String [], args), {   ,List list =, arrays . aslist(1, 5日,10日,4日,2);   ,//打印列表中的每一个数字   ,list.forEach (system . out:: println);   }

二方法引用

方法引用就是通过方法的名字来指向一个方法。它可以使语言的构造更紧凑简洁,减少冗余代码。方法引用的操作符是双冒号::。方法引用有如下几种分类:

类型语法λ表达式静态方法引用类名::静态方法名(args)→类名。静态方法名(args)实例方法引用实例::实例方法名(args)→实例。实例方法名(args)对象方法引用类名::对象方法名(本月,args)→类名。对象方法名(args)构建方法引用类名::新(args)→新类名(args)

三实践

以下例子主要借用学生类来演示,学生类定义如下:

public  class  Student  {      ,private  String 名称;   ,private  Integer 年龄;      ,public  static  int  compareByAge (Student , s1, Student  s2), {   return 才能s1.age.compareTo (s2.age);   ,}      ,//省略属性获?设置方法   }

<强> 3.1静态方法引用

现假设有50个学生,存放在一列个清单表中,现需要对年龄进行从小到大排序。我们一般会写一个比较器进行排序,如下:

package  com.nobody;      import  java.util.ArrayList;   import  java.util.Comparator;   import 并不知道;/* *   ,* @Description   ,* @Author  Mr.nobody   ,* @Date  2021/3/7   ,* @Version  1.0   ,*/public  class  Test  {   ,public  static  void  main (String [], args), {      List<才能;Student>, list =, new  ArrayList<在();//,才能添加元素省略,测试可自行添加//,才能排序   list . sort (new  StudentAgeComparator就,,());   ,}   ,//对学生年龄的比较器   ,static  class  StudentAgeComparator  implements  Comparator, {   public 才能;int 比较(Student  s1, Student  s2), {   ,,return  s1.getAge () .compareTo (s2.getAge ());   ,,}   ,}   }

我们发现,列表的排序方法接受的参数比较器是一个函数式接口,则可以用λ表达式改为如下形式:

list.sort ((s1, s2),→, s1.getAge () .compareTo (s2.getAge ())),

我们又发现,学生类有个静态方法compareByAge,其功能和上述λ表达式一样,所以我们可以将以上λ表达式改为如下形式:

list.sort ((s1, s2),→, Student.compareByAge (s1, s2));

可以看的出,最终的λ表达式是调用学生类的一个方法,所以,根据静态方法引用规则,可改为如下形式:

list.sort(学生::compareByAge);

<强> 3.2实例方法引用

即引用已经存在的实例的方法。静态方法引用类无需实例化,直接用类名来调用,而实例方法引用是要先实例化对象。

如果将学生类的静态方法compareByAge改为非静态方法,即:

public  int  compareByAge (Student , s1, Student  s2), {   ,return  s1.age.compareTo (s2.age);   }

Java8新特性之方法引用的使用方法