Java8中如何使用方法引用

发布时间:2020-11-16 16:13:47 作者:Leah
来源:亿速云 阅读:118

本篇文章给大家分享的是有关Java8中如何使用方法引用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

在学习lambda表达式之后,我们通常使用lambda表达式来创建匿名方法。然而,有时候我们仅仅是调用了一个已存在的方法。如下:

 Arrays.sort(stringsArray,(s1,s2)->s1.compareToIgnoreCase(s2)); 

在Java8中,我们可以直接通过方法引用来简写lambda表达式中已经存在的方法。

Arrays.sort(stringsArray, String::compareToIgnoreCase); 

这种特性就叫做方法引用(Method Reference)。

方法引用的形式

方法引用的标准形式是: 类名::方法名 。(注意:只需要写方法名,不需要写括号)

有以下四种形式的方法引用:

类型示例
引用静态方法ContainingClass::staticMethodName
引用某个对象的实例方法containingObject::instanceMethodName
引用某个类型的任意对象的实例方法ContainingType::methodName
引用构造方法ClassName::new

下面我们通过一个小Demo来分别学习这几种形式的方法引用:

 public  class  Person { 

    public  enum  Sex{ 

      MALE,FEMALE 

    } 

 

    String name; 

    LocalDate birthday; 

    Sex gender; 

    String emailAddress; 

 

    public  String getEmailAddress() { 

      return  emailAddress; 

    } 

 

    public  Sex getGender() { 

      return  gender; 

    } 
    public  LocalDate getBirthday() { 

      return  birthday; 

    } 

 

    public  String getName() { 

      return  name; 

    } 

    public  static  int  compareByAge(Person a,Person b){ 

      return  a.birthday.compareTo(b.birthday); 

    }

 } 

引用静态方法

 Person [] persons = new Person[10];

//使用匿名类
Arrays.sort(persons, new Comparator<Person>() {
      @Override
      public int compare(Person o1, Person o2) {
        return o1.birthday.compareTo(o2.birthday);
      }
 });

//使用lambda表达式
Arrays.sort(persons, (o1, o2) -> o1.birthday.compareTo(o2.birthday));

//使用lambda表达式和类的静态方法
Arrays.sort(persons, (o1, o2) -> Person.compareByAge(o1,o2));

//使用方法引用
//引用的是类的静态方法
Arrays.sort(persons, Person::compareByAge);

引用对象的实例方法

 class  ComparisonProvider{ 

        public  int  compareByName(Person a,Person b){ 

          return  a.getName().compareTo(b.getName()); 

        } 

 

        public  int  compareByAge(Person a,Person b){ 

          return  a.getBirthday().compareTo(b.getBirthday()); 

        } 

      } 

 

 ComparisonProvider provider =  new  ComparisonProvider(); 

 

 //使用lambda表达式 

 //对象的实例方法 

 Arrays.sort(persons,(a,b)->provider.compareByAge(a,b)); 

 

 //使用方法引用 

 //引用的是对象的实例方法 

 Arrays.sort(persons, provider::compareByAge); 

引用类型对象的实例方法

 String[] stringsArray = { "Hello" , "World" }; 

 //使用lambda表达式和类型对象的实例方法 

 Arrays.sort(stringsArray,(s1,s2)->s1.compareToIgnoreCase(s2)); 

 //使用方法引用 

 //引用的是类型对象的实例方法 

 Arrays.sort(stringsArray, String::compareToIgnoreCase); 

引用构造方法

 public  static  <T, SOURCE  extends  Collection<T>, DEST  extends  Collection<T>> 

    DEST transferElements(SOURCE sourceColletions, Supplier<DEST> colltionFactory) { 

      DEST result = colltionFactory.get(); 

      for  (T t : sourceColletions) { 

        result.add(t); 

      } 

      return  result; 

    } 

 ... 

  

 final  List<Person> personList = Arrays.asList(persons); 

 

 //使用lambda表达式 

 Set<Person> personSet = transferElements(personList,()->  new  HashSet<>()); 

 

 //使用方法引用 

 //引用的是构造方法 

 Set<Person> personSet2 = transferElements(personList, HashSet:: new );  

以上就是Java8中如何使用方法引用,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。

推荐阅读:
  1. java8中的方法引用与构造器引用
  2. 什么是Java8 Lamda方法引用和构造引用

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

java8 方法引用 ava

上一篇:SpringBoot如何实现统一异常处理

下一篇:一文教你使用AspectJ

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》