中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》
  • 首頁 > 
  • 教程 > 
  • 開發技術 > 
  • 如何掌握Java8中Lambda表達式函數式接口及方法構造器數組的引用

如何掌握Java8中Lambda表達式函數式接口及方法構造器數組的引用

發布時間:2021-10-08 13:46:37 來源:億速云 閱讀:161 作者:iii 欄目:開發技術

本篇內容主要講解“如何掌握Java8中Lambda表達式函數式接口及方法構造器數組的引用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“如何掌握Java8中Lambda表達式函數式接口及方法構造器數組的引用”吧!

目錄
  • 函數式接口概述

  • 函數式接口示例

    • 1、Runnable接口

    • 2、自定義函數式接口

    • 3、作為參數傳遞 Lambda 表達式

  • 內置函數式接口

    • Lambda簡述

      • Lambda語法

        • 方法引用

          • 構造器引用

            • 數組引用

              函數式接口概述

              只包含一個抽象方法的接口,稱為函數式接口。

              可以通過 Lambda 表達式來創建該接口的對象。

              可以在一個接口上使用 @FunctionalInterface 注解,這樣做可以檢查它是否是一個函數式接口。同時 javadoc 也會包含一條聲明,說明這個接口是一個函數式接口。

              在java.util.function包下定義了Java 8 的豐富的函數式接口。

              在函數式編程語言當中,函數被當做一等公民對待。在將函數作為一等公民的編程語言中,Lambda表達式的類型是函數。但是在Java8中,有所不同。在Java8中,Lambda表達式是對象,而不是函數,它們必須依附于一類特別的對象類型——函數式接口。

              簡單的說,在Java8中,Lambda表達式就是一個函數式接口的實例。這就是Lambda表達式和函數式接口的關系。也就是說,只要一個對象是函數式接口的實例,那么該對象就可以用Lambda表達式來表示。所以用匿名實現類表示的現在都可以用Lambda表達式來寫。

              函數式接口示例

              1、Runnable接口

              2、自定義函數式接口

              @FunctionalInterface
              public interface MyFunctional01{
                  public String getValue();
              }
              
              //使用泛型
              @FunctionalInterface
              public interface MyFunctional02<T>{
                  public T getValue(T t);
              }

              3、作為參數傳遞 Lambda 表達式

              public class LambdaTest {
                  public static void main(String[] args) {
                      String newStr = toUpperString(str -> str.toUpperCase(),"abcDEf");
                      System.out.println(newStr);
                  }
                  public static String toUpperString(MyFunc<String> my,String str){
                      return my.getValue(str);
                  }
              }
              
              @FunctionalInterface
              interface MyFunc<T>{
                  public T getValue(T t);
              }

              內置函數式接口

              import java.util.function.Consumer;
              
              /**
               * @Author: Yeman
               * @Date: 2021-10-03-22:50
               * @Description:
               */
              public class LambdaTest {
                  public static void main(String[] args) {
                      Consumer<Integer> consumer = i -> System.out.println(i);
                      consumer.accept(9);
                  }
              }

              如何掌握Java8中Lambda表達式函數式接口及方法構造器數組的引用

              Lambda簡述

              Lambda 是一個匿名函數,我們可以把 Lambda 表達式理解為是一段可以傳遞的代碼(將代碼像數據一樣進行傳遞)。使用它可以寫出更簡潔、更靈活的代碼。作為一種更緊湊的代碼風格,使Java的語言表達能力得到了提升。

              其本質是作為函數式接口(只有一個抽象方法)的實例。

              Lambda 表達式:在Java 8 語言中引入的一種新的語法元素和操作符。這個操作符為 “->” , 該操作符被稱為 Lambda 操作符或箭頭操作符。它將 Lambda 分為兩個部分:
              ①左側:指定了 Lambda 表達式需要的參數列表。
              ②右側:指定了 Lambda 體,是抽象方法的方法體。

              Lambda語法

              1、無參,無返回值

              public class LambdaTest {
                  public static void main(String[] args) {
                      //未使用Lambda表達式
                      Runnable runnable1 = new Runnable() {
                          @Override
                          public void run() {
                              System.out.println("這是第一個語法!");
                          }
                      };
                      runnable1.run();
                      System.out.println("======================");
                      //使用Lambda表達式
                      Runnable runnable2 = () -> {
                          System.out.println("這是用了Lambda表達式的一個語法!");
                      };
                      runnable2.run();
                  }
              }

              2、一個參數,無返回值


              3、數據類型可以省略,因為可由編譯器推斷得出,稱為“類型推斷”


              4、Lambda 若只需要一個參數時,參數的小括號可以省略


              5、Lambda 需要兩個或以上的參數,多條執行語句,并且可以有返回值


              6、當 Lambda 體只有一條語句時,return 與大括號若有,都可以省略

              方法引用

              當要傳遞給Lambda體的操作,已經有實現的方法了,可以使用方法引用。

              方法引用可以看做是Lambda表達式深層次的表達。換句話說,方法引用就是Lambda表達式,也就是函數式接口的一個實例,通過方法的名字來指向一個方法,可以認為是Lambda表達式的一個語法糖。

              要求:實現接口的抽象方法的參數列表和返回值類型,必須與方法引用的方法的參數列表和返回值類型保持一致。

              格式:使用操作符 “::” 將類(或對象)與方法名分隔開。

              如下三種主要使用情況:
              對象::非靜態方法名
              類::靜態方法名
              類::非靜態方法名

              示例:

              import java.util.Comparator;
              import java.util.function.Consumer;
              
              /**
               * @Author: Yeman
               * @Date: 2021-10-03-22:50
               * @Description:
               */
              public class LambdaTest {
                  public static void main(String[] args) {
              
                      Consumer<Integer> consumer = i -> System.out.println(i);
                      consumer.accept(9);
              
                      Consumer<String> stringConsumer = System.out :: println;
                      stringConsumer.accept("Hello");
              
                      Comparator<Integer> comparable = (x, y) -> Integer.compare(x,y);
                      System.out.println(comparable.compare(2,9));
              
                      Comparator<Integer> integerComparator = Integer :: compare;
                      System.out.println(integerComparator.compare(9,2));
                  }
              }

              構造器引用

              格式:ClassName::new

              與函數式接口相結合,自動與函數式接口中方法兼容。可以把構造器引用賦值給定義的方法,要求構造器參數列表要與接口中抽象方法的參數列表一致,且方法的返回值即為構造器對應類的對象。

              數組引用

              可以將數組看作一個類,則數組引用就類似于構造器引用。

              格式:type[] :: new

              import java.util.function.Function;
              
              /**
               * @Author: Yeman
               * @Date: 2021-10-03-22:50
               * @Description:
               */
              public class LambdaTest {
                  public static void main(String[] args) {
                      Function<Integer,String[]> function = length -> new String[length];
                      String[] apply = function.apply(3);
                      System.out.println(apply[2]);
              
                      System.out.println("================");
              
                      Function<Integer,String[]> function1 = String[] :: new;
                      System.out.println(function1.apply(5));
                  }
              }

              到此,相信大家對“如何掌握Java8中Lambda表達式函數式接口及方法構造器數組的引用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

              向AI問一下細節

              免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

              AI

              横峰县| 沙湾县| 西乌珠穆沁旗| 四川省| 垦利县| 泸州市| 永善县| 饶阳县| 新野县| 兰州市| 镇原县| 南丰县| 陆河县| 海南省| 自治县| 湖北省| 万全县| 巩义市| 祁连县| 永嘉县| 天等县| 桦川县| 横山县| 平顺县| 滕州市| 上蔡县| 钟山县| 寿宁县| 英德市| 武宣县| 军事| 沂源县| 长垣县| 彭泽县| 鹤壁市| 微山县| 大渡口区| 万年县| 通化县| 绍兴县| 德兴市|