1. gzyueqian
      13352868059

      想進階java工程師應該怎么選擇深入學習java課程?

      更新時間: 2018-10-03 12:00:00來源: java編程瀏覽量:3067

          lambda表達式格式
          (參數(shù)) -> 單行語句; 不需要顯式return, lambda表達式能自行判斷出返回值
          (參數(shù)) -> {多行語句}; 如果方法有返回參數(shù)的話,需要顯式的使用return
          (參數(shù)) -> 表達式;
          函數(shù)式接口
          對于只包含一個抽象方法的接口, 可以通過lambda表達式創(chuàng)建該接口的對象. 這種接口稱為函數(shù)式接口
          可以使用@FunctionalInterface

          例如使用Lambda表達式來實現(xiàn)Runnable接口:


       /**
        * 使用lambda式實現(xiàn)函數(shù)式接口時,只能轉換成對應的接口對象, 轉換成object對象都是錯誤的
        * 如下面這條語句編譯會報錯 : Object obj = () -> System.out.println("使用lambda表達式來實現(xiàn)Runnable接口") ; 
        * 輸出結果: 使用lambda表達式來實現(xiàn)Runnable接口
        */
       Runnable r1 = () -> System.out.println("使用lambda表達式來實現(xiàn)Runnable接口") ;
       new Thread(r1).start();

          需要注意的時, 如果你的lambda式存在檢查期異常, 那么該異常需要在目標接口的抽象方法中進行聲明. 如Runnable r2 = () -> Thread.sleep(100);這個lambda表達式無法編譯通過.
          方法引用
          有時候你想傳遞給其他代碼的操作已經有實現(xiàn)的方法了. 就可以使用方法引用
          方法引用格式
          引用靜態(tài)方法 : 類名稱 :: 靜態(tài)方法名稱
          引用某個對象的方法 : 實例化對象 :: 普通方法
          引用特定類型的方法 : 特定類 :: 普通方法
          引用構造方法 : 類名稱 :: new
      方法引用使用樣例

      引用靜態(tài)方法 :


      // 聲明為函數(shù)式接口
      interface IMethodRef{
       void print(String s);
      }
      
      public static void main(String [] args) {
          /**
           * 將IMethodRef中print方法的實現(xiàn)指向System.out.println方法
           * 這里同樣的,接口只能有一個抽象方法
           * 輸出結果 : Hello World
           */
          IMethodRef ref = System.out :: println;
          ref.print("Hello World");
      }

          引用某個對象的方法 :


      // 聲明為函數(shù)式接口
      @FunctionalInterface
      interface IMethodRef{
       String upper();
      }
      
      public static void main(String [] args) {
          /**
        * "Hello World" : 表示一個String實例
        *  IMethodRef的upper方法,引用String實例的toUpperCase()方法,等同于"Hello World".toUpperCase()
        *  輸出結果 : HELLO WORLD
        */
          IMethodRef ref = "Hello World" :: toUpperCase;
          System.out.println(ref.upper()) ;
      }
      

          引用特定類型的方法 :


      @FunctionalInterface
      interface IMethodRef{
       int compareTo(BigDecimal big1, BigDecimal big2);
      }
      
      public static void main(String [] args) {
       IMethodRef ref = BigDecimal :: compareTo;
       // 等同于調用BigDecimal.ONE.compareTo(BigDecimal.ZERO), 輸出結果是1
       System.out.println(ref.compareTo(BigDecimal.ONE, BigDecimal.ZERO)) ;
       // 等同于調用BigDecimal.ZERO.compareTo(BigDecimal.ONE) , 輸出結果是-1
       System.out.println(ref.compareTo(BigDecimal.ZERO, BigDecimal.ONE)) ;
       
      }

      引用構造方法 :


      package lambda;
      
      class Person{
       private String name;
       private int  age;
       
       public Person(String name, int age) {
       this.name = name ;
       this.age = age ;
       }
       @Override
       public String toString() {
       return "Person [name=" + name + ", age=" + age + "]" ;
       }
      }
      
      // 聲明為函數(shù)式接口
      @FunctionalInterface
      interface IMethodRef<T>{
       T create(String name, int age);
      }
      
      public class MethodRefTest2 {
       
       public static void main(String [] args) {
       // 表示IMethodRef的create引用Person的構造方法來實現(xiàn)
       IMethodRef<Person> ref = Person :: new;
       Person p = ref.create("七夜雪", 18);
       // 輸出結果, Person [name=七夜雪, age=18]
       System.out.println(p) ;
       }
       
      }
          想要了解更多的java應用技術那就加入我們吧!

      免費預約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 日本有码中文字幕视频 | 色婷婷综合久久久久中文一区二区 | 亚洲人成影院在线播放高清 | 日本中文字幕乱码视频在线 | 亚洲精品综合网在线影院 | 亚洲Av不卡在线观看 |