亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

30分鐘入門Java8之方法引用學習

 更新時間:2017年04月07日 09:19:00   作者:JohnTsai  
在Java8中,我們可以直接通過方法引用來簡寫lambda表達式中已經(jīng)存在的方法,這篇文章主要介紹了30分鐘入門Java8之方法引用學習,有興趣可以了解一下。

前言

之前兩篇文章分別介紹了Java8的lambda表達式默認方法和靜態(tài)接口方法。今天我們繼續(xù)學習Java8的新語言特性——方法引用(Method References)。

在學習lambda表達式之后,我們通常使用lambda表達式來創(chuàng)建匿名方法。然而,有時候我們僅僅是調(diào)用了一個已存在的方法。如下:

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

在Java8中,我們可以直接通過方法引用來簡寫lambda表達式中已經(jīng)存在的方法。

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

這種特性就叫做方法引用(Method Reference)。

方法引用的形式

方法引用的標準形式是: 類名::方法名 。(注意:只需要寫方法名,不需要寫括號)

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

類型 示例
引用靜態(tài)方法 ContainingClass::staticMethodName
引用某個對象的實例方法 containingObject::instanceMethodName
引用某個類型的任意對象的實例方法 ContainingType::methodName
引用構(gòu)造方法 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); 

    }

 } 

引用靜態(tài)方法

 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表達式和類的靜態(tài)方法
Arrays.sort(persons, (o1, o2) -> Person.compareByAge(o1,o2));

//使用方法引用
//引用的是類的靜態(tài)方法
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); 

引用構(gòu)造方法

 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<>()); 

 

 //使用方法引用 

 //引用的是構(gòu)造方法 

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

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringMVC集成Web與MVC執(zhí)行流程和數(shù)據(jù)響應及交互相關(guān)介紹全面總結(jié)

    SpringMVC集成Web與MVC執(zhí)行流程和數(shù)據(jù)響應及交互相關(guān)介紹全面總結(jié)

    Spring MVC 是 Spring 提供的一個基于 MVC 設計模式的輕量級 Web 開發(fā)框架,本質(zhì)上相當于 Servlet,Spring MVC 角色劃分清晰,分工明細,這篇文章主要介紹了SpringMVC集成Web與MVC執(zhí)行流程和數(shù)據(jù)響應及交互
    2022-10-10
  • SpringBoot的配置文件application.yml及加載順序詳解

    SpringBoot的配置文件application.yml及加載順序詳解

    這篇文章主要介紹了SpringBoot的配置文件application.yml及加載順序,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Java?InputStream實戰(zhàn)之輕松讀取操作文件流

    Java?InputStream實戰(zhàn)之輕松讀取操作文件流

    在Java中,輸入輸出是非常重要的基礎功能,其中,InputStream是Java中的一個重要輸入流類,用于從輸入源讀取數(shù)據(jù),下面我們就來學習一下InputStream類的相關(guān)知識吧
    2023-10-10
  • java刪除文件時總是返回false,刪不掉的解決方案

    java刪除文件時總是返回false,刪不掉的解決方案

    這篇文章主要介紹了java刪除文件時總是返回false,刪不掉的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Springboot?多級緩存設計與實現(xiàn)方案

    Springboot?多級緩存設計與實現(xiàn)方案

    多級緩存是提升高并發(fā)系統(tǒng)性能的關(guān)鍵策略之一,它不僅能夠減少系統(tǒng)的響應時間,提高用戶體驗,還能有效降低后端系統(tǒng)的負載,防止系統(tǒng)過載,這篇文章主要介紹了Springboot?多級緩存設計與實現(xiàn),需要的朋友可以參考下
    2024-02-02
  • 如何通過Java代碼實現(xiàn)KMP算法

    如何通過Java代碼實現(xiàn)KMP算法

    這篇文章主要介紹了如何通過Java代碼實現(xiàn)KMP算法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • java HashMap 的工作原理詳解

    java HashMap 的工作原理詳解

    本文主要介紹java HashMap 的資料,這里整理了相關(guān)資料,并詳細說明了HashMap的用法,有需要的小伙伴可以參考下
    2016-09-09
  • 如何使用IDEA創(chuàng)建MAPPER模板過程圖解

    如何使用IDEA創(chuàng)建MAPPER模板過程圖解

    這篇文章主要介紹了如何使用IDEA創(chuàng)建MAPPER模板,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05
  • Spring Security permitAll()不允許匿名訪問的操作

    Spring Security permitAll()不允許匿名訪問的操作

    這篇文章主要介紹了Spring Security permitAll()不允許匿名訪問的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Java中static修飾的靜態(tài)變量、方法及代碼塊的特性與使用

    Java中static修飾的靜態(tài)變量、方法及代碼塊的特性與使用

    這篇文章主要介紹了Java中static修飾的靜態(tài)變量、方法及代碼塊的特性與使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04

最新評論