欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

30分鐘入門Java8之方法引用學(xué)習(xí)

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

前言

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

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

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

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

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

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

方法引用的形式

方法引用的標(biāo)準(zhǔn)形式是: 類名::方法名 。(注意:只需要寫方法名,不需要寫括號(hào))

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

類型 示例
引用靜態(tài)方法 ContainingClass::staticMethodName
引用某個(gè)對象的實(shí)例方法 containingObject::instanceMethodName
引用某個(gè)類型的任意對象的實(shí)例方法 ContainingType::methodName
引用構(gòu)造方法 ClassName::new

下面我們通過一個(gè)小Demo來分別學(xué)習(xí)這幾種形式的方法引用:

 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表達(dá)式
Arrays.sort(persons, (o1, o2) -> o1.birthday.compareTo(o2.birthday));

//使用lambda表達(dá)式和類的靜態(tài)方法
Arrays.sort(persons, (o1, o2) -> Person.compareByAge(o1,o2));

//使用方法引用
//引用的是類的靜態(tài)方法
Arrays.sort(persons, Person::compareByAge);

引用對象的實(shí)例方法

 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表達(dá)式 

 //對象的實(shí)例方法 

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

 

 //使用方法引用 

 //引用的是對象的實(shí)例方法 

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

引用類型對象的實(shí)例方法

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

 //使用lambda表達(dá)式和類型對象的實(shí)例方法 

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

 //使用方法引用 

 //引用的是類型對象的實(shí)例方法 

 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表達(dá)式 

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

 

 //使用方法引用 

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

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

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

    Springboot?多級緩存設(shè)計(jì)與實(shí)現(xiàn)方案

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

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

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

    java HashMap 的工作原理詳解

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

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

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

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

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

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

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

最新評論