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

Java的Lambda表達式和Stream流的作用以及示例

 更新時間:2023年05月20日 09:02:30   作者:叫我二蛋  
這篇文章主要介紹了Java的Lambda表達式和Stream流簡單示例,Lambda允許把函數(shù)作為一個方法的參數(shù),使用Lambda表達式可以寫出更簡潔、更靈活的代碼,而其作為一種更緊湊的代碼風格,使Java的語言表達能力得到了提升,需要的朋友可以參考下

Lambda介紹

  • java8新特性
  • Lambda表達式是一個匿名函數(shù),有以下特性:
    • a. 通過使用Lambda表達式使代碼簡潔、緊湊
    • b. 匿名函數(shù)可以作為參數(shù)、返回值。

Lambda語法格式

(parameters)->{statements;}
parameters:參數(shù)列表。

  1. statements:執(zhí)行語句。
    ->:使用指定參數(shù)完成某個功能。
  2. (parameters)->expression
    parameters:參數(shù)列表。
    expression:表達式。
    ->:使用指定參數(shù)完成某個功能。

使用細節(jié)

  • 可選的大括號:函數(shù)體只包含一個語句,不需要大括號。
(String msg) -> System.out.println(msg);
  • 可選的參數(shù)圓括號:只有一個參數(shù),省略圓括號及參數(shù)類型。
(msg) -> System.out.println(msg);
  • 可選的返回關鍵字return:函數(shù)體只有一個表達式,且運算結果匹配返回類型,省略return。
(int a,int b) -> a+b
  • 可選的參數(shù)類型:不需要參數(shù)類型,編譯器可以根據(jù)參數(shù)值進行推斷。
(a,b)-> a+b

Lambda方法引用

當Lambda表達式所要完成的業(yè)務邏輯已經(jīng)存在,直接引用對應的方法。 被引用的方法與函數(shù)式抽象方法:參數(shù)列表要相同、返回值類型兼容。

語法格式

通過雙冒號:: 進行方法引用

哪些方法可以引用

  • 靜態(tài)方法 通過 類名::方法 引用,如示例,Test::run 會引用到Test類的run(),且與Runnable接口中的run方法參數(shù)、返回值相同。
public class Test {
    public static void main(String[] args) {
        new Thread(Test::run).start();
    }
    private static void run() {
        System.out.println("執(zhí)行業(yè)務");
    }
}
  • 構造方法 聲明User類
public class User {
    public User(){}
}

聲明函數(shù)接口

@FunctionalInterface
public interface HelloLambda {
    public User get();
}

通過 類名::new 引用

public class Test {
    public static User get(HelloLambda helloLambda) {
        return helloLambda.get();
    }
    public static void main(String[] args) {
        User user = get(User::new);
    }
}
  • 實例方法 聲明函數(shù)接口
@FunctionalInterface
public interface HelloLambda {
    public void print(String text);
}

通過 對象::方法 引用

public class Test {
    public static void print(HelloLambda helloLambda) {
        helloLambda.print("HELLO");
    }
    public static void main(String[] args) {
        LowerPrint test = new LowerPrint();
        print(test::toLowerCase);
    }
}
class LowerPrint {
    public void toLowerCase(String text) {
        System.out.println(text.toLowerCase());
    }
}

Lambda使用前提

Lambda表達式的語法是非常簡潔的,通過以上的示例可以發(fā)現(xiàn),在使用Lambda表達式時需要滿足以下條件:

  1. 方法的參數(shù)和局部變量類型必須為接口才能使用Lambda。
  2. 必須有一個函數(shù)式接口:有且只有一個抽象方法的接口 @FunctionalInterface注解。

常見的函數(shù)式接口:

Runnable/Callable
Supplier/Consumer
Comparator
Predicate
Function

Lambda本質(zhì)

Lambda本質(zhì)其實就是為了解決匿名內(nèi)部類使用時繁瑣的代碼。 舉個例子:當我們啟動一個線程執(zhí)行任務時,需要執(zhí)行以下操作

  1. Thread類需要一個Runnable接口作為參數(shù),其中run方法執(zhí)行核心內(nèi)容。
  2. 為了指定run方法體,不得不需要一個Runnable的實現(xiàn)類。
  3. 為了省去定義一個Runnable的實現(xiàn)類,不得不使用匿名內(nèi)部類。
  4. 使用匿名內(nèi)部類時必須覆蓋run方法體。
  5. 但是實際上我們只需要編寫run方法體的內(nèi)容,所以當我們使用Lambda表達式啟動一個線程執(zhí)行任務時,不用定義Runnable的實現(xiàn)類也可以不使用匿名內(nèi)部類。如下示例:
new Thread(() -> System.out.println("執(zhí)行業(yè)務")).start();

Lambda和匿名內(nèi)部類對比

  • 所需類型不一樣:匿名內(nèi)部類的類型可以是類、抽象類、接口;Lambda表達式所需要的類型必須是接口。
  • 抽象方法的數(shù)量不一樣:匿名內(nèi)部類中的抽象方法數(shù)量是隨意的;Lambda表達式所需要的接口中只能有一個抽象方法。
  • 實現(xiàn)原理不一樣:匿名內(nèi)部類是編譯后形成一個class;Lambda表達式是在程序運行時動態(tài)生成class。

Stream流介紹

Stream流的目的是增強容器的操作:List、Set、Queue等。其特點為:

  • 專注于對容器對象的聚合操作
  • 提供串行/并行兩種模式
  • 提高編程效率、可讀性

Stream流使用分為3個步驟:獲取流->中間操作->終結操作。

獲取流

Stream<String> stringStream = Stream.of(new String[]{"a", "b"});
Stream<String> stream = new ArrayList<String>().stream();

中間操作:打開流->操作流->返回新流->交給下一個流使用。具體的操作有:map、filter、sorted、limit、skip、concat、paraller。

Stream<String> stringStream = Stream.of(new String[]{"a", "b"});
stringStream.filter(s -> s.equalsIgnoreCase("a"));

終結操作:只能有一個,最后的操作。具體的操作有:forEach、collect、min、max、count

Stream<String> stringStream = Stream.of(new String[]{"a", "b"});
stringStream.forEach(System.out::println);

到此這篇關于Java的Lambda表達式和Stream流簡單示例的文章就介紹到這了,更多相關Lambda表達式和Stream流示例內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 我從jdk1.8升級到jdk11所遇到的坑都有這些

    我從jdk1.8升級到jdk11所遇到的坑都有這些

    這篇文章主要介紹了從jdk1.8升級到jdk11將會遇到的一些坑,本文給大家分享解決方案對大家的學習或工作具有參考借鑒價值,對jdk1.8升級到jdk11相關知識感興趣的朋友,快來看看吧
    2021-08-08
  • SpringBoot3.x打包Docker容器的實現(xiàn)

    SpringBoot3.x打包Docker容器的實現(xiàn)

    這篇文章主要介紹了SpringBoot3.x打包Docker容器的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • Java Socket+mysql實現(xiàn)簡易文件上傳器的代碼

    Java Socket+mysql實現(xiàn)簡易文件上傳器的代碼

    最近在做一個小項目,項目主要需求是實現(xiàn)一個文件上傳器,通過客戶端的登陸,把本地文件上傳到服務器的數(shù)據(jù)庫(本地的)。下面通過本文給大家分享下實現(xiàn)代碼,感興趣的朋友一起看看吧
    2016-10-10
  • Java 8 Stream操作類型及peek示例解析

    Java 8 Stream操作類型及peek示例解析

    這篇文章主要介紹了Java 8 Stream操作類型及peek示例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04
  • SpringBoot整合liquibase及l(fā)iquibase生成初始化腳本的方式

    SpringBoot整合liquibase及l(fā)iquibase生成初始化腳本的方式

    這篇文章主要介紹了SpringBoot整合liquibase的相關資料,文中給大家介紹了liquibase生成初始化腳本的兩種方式,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • Java如何在 Word 中設置上、下標

    Java如何在 Word 中設置上、下標

    這篇文章主要介紹了Java如何在 Word 中設置上、下標,幫助大家更好的利用Java處理文檔,感興趣的朋友可以了解下
    2020-09-09
  • Java漏桶算法的簡單代碼實例

    Java漏桶算法的簡單代碼實例

    這篇文章主要介紹了Java漏桶算法的簡單代碼實例,漏桶算法的意義在于能夠平滑請求,不給下游服務造成過大壓力,特別適用于突發(fā)流量或者定時任務拉取大量數(shù)據(jù)時,需要處理大量數(shù)據(jù)或者請求的場景,需要的朋友可以參考下
    2024-01-01
  • Java求質(zhì)數(shù)的幾種常用算法分析

    Java求質(zhì)數(shù)的幾種常用算法分析

    這篇文章主要介紹了Java求質(zhì)數(shù)的幾種常用算法,結合實例形式分析了三種比較常見的求質(zhì)數(shù)算法原理及相關實現(xiàn)技巧,需要的朋友可以參考下
    2018-12-12
  • Java emoji持久化mysql過程詳解

    Java emoji持久化mysql過程詳解

    這篇文章主要介紹了Java emoji持久化mysql過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07
  • 在java List中進行模糊查詢的實現(xiàn)方法

    在java List中進行模糊查詢的實現(xiàn)方法

    下面小編就為大家?guī)硪黄趈ava List中進行模糊查詢的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-11-11

最新評論