最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java的Lambda表達(dá)式和Stream流的作用以及示例

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

Lambda介紹

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

Lambda語法格式

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

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

使用細(xì)節(jié)

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

Lambda方法引用

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

語法格式

通過雙冒號:: 進(jìn)行方法引用

哪些方法可以引用

  • 靜態(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è)務(wù)");
    }
}
  • 構(gòu)造方法 聲明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í)例方法 聲明函數(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表達(dá)式的語法是非常簡潔的,通過以上的示例可以發(fā)現(xiàn),在使用Lambda表達(dá)式時(shí)需要滿足以下條件:

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

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

Runnable/Callable
Supplier/Consumer
Comparator
Predicate
Function

Lambda本質(zhì)

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

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

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

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

Stream流介紹

Stream流的目的是增強(qiáng)容器的操作:List、Set、Queue等。其特點(diǎn)為:

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

Stream流使用分為3個(gè)步驟:獲取流->中間操作->終結(jié)操作。

獲取流

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

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

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

終結(jié)操作:只能有一個(gè),最后的操作。具體的操作有:forEach、collect、min、max、count

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

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

相關(guān)文章

  • spring-retry組件的使用教程

    spring-retry組件的使用教程

    Spring Retry的主要目的是為了提高系統(tǒng)的可靠性和容錯(cuò)性,當(dāng)方法調(diào)用失敗時(shí),Spring Retry可以在不影響系統(tǒng)性能的情況下,自動進(jìn)行重試,從而減少故障對系統(tǒng)的影響,這篇文章主要介紹了spring-retry組件的使用,需要的朋友可以參考下
    2023-06-06
  • SpringBoot配置數(shù)據(jù)庫密碼加密的實(shí)現(xiàn)

    SpringBoot配置數(shù)據(jù)庫密碼加密的實(shí)現(xiàn)

    這篇文章主要介紹了SpringBoot配置數(shù)據(jù)庫密碼加密的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Java通過接口實(shí)現(xiàn)匿名類的實(shí)例代碼

    Java通過接口實(shí)現(xiàn)匿名類的實(shí)例代碼

    這篇文章介紹了Java通過接口實(shí)現(xiàn)匿名類的實(shí)例代碼,有需要的朋友可以參考一下
    2013-10-10
  • SpringBoot項(xiàng)目運(yùn)行一段時(shí)間后自動關(guān)閉的坑及解決

    SpringBoot項(xiàng)目運(yùn)行一段時(shí)間后自動關(guān)閉的坑及解決

    這篇文章主要介紹了SpringBoot項(xiàng)目運(yùn)行一段時(shí)間后自動關(guān)閉的坑及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • @TableName注解和@Table的區(qū)別及說明

    @TableName注解和@Table的區(qū)別及說明

    這篇文章主要介紹了@TableName注解和@Table的區(qū)別及說明,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java通過cellstyle屬性設(shè)置Excel單元格常用樣式的全面總結(jié)講解

    Java通過cellstyle屬性設(shè)置Excel單元格常用樣式的全面總結(jié)講解

    在處理Excel文件時(shí),經(jīng)常需要對單元格進(jìn)行樣式設(shè)置,以滿足特定的需求和美化要求,這篇文章主要給大家介紹了關(guān)于Java通過cellstyle屬性設(shè)置Excel單元格常用樣式的相關(guān)資料,需要的朋友可以參考下
    2024-01-01
  • 詳解Java8中接口的默認(rèn)方法和靜態(tài)方法

    詳解Java8中接口的默認(rèn)方法和靜態(tài)方法

    Java 8是Java語言的一個(gè)重要版本,其中引入了許多新特性和改進(jìn),其中一個(gè)值得關(guān)注的特性是接口的默認(rèn)方法和靜態(tài)方法,本文就來和大家簡單講講吧
    2023-05-05
  • SpringMVC設(shè)置全局異常處理器的步驟

    SpringMVC設(shè)置全局異常處理器的步驟

    在項(xiàng)目中我們有需求做一個(gè)全局異常處理,來規(guī)范所有出去的異常信息,這篇文章主要介紹了SpringMVC設(shè)置全局異常處理器,需要的朋友可以參考下
    2024-03-03
  • 簡單了解JavaCAS的相關(guān)知識原理

    簡單了解JavaCAS的相關(guān)知識原理

    這篇文章主要介紹了簡單了解JavaCAS的相關(guān)知識,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • 簡述Java編程語言對象的容納

    簡述Java編程語言對象的容納

    這篇文章主要對Java編程思想中對象的容納進(jìn)行了一個(gè)總體的介紹,具有一定的參考價(jià)值,需要的朋友可以了解下。
    2017-09-09

最新評論

青田县| 白山市| 荣成市| 吉木萨尔县| 铜川市| 迁西县| 大姚县| 登封市| 南安市| 孝昌县| 观塘区| 分宜县| 富川| 龙里县| 宁津县| 象山县| 塔城市| 阳春市| 长丰县| 开阳县| 黑山县| 清丰县| 达日县| 泸州市| 玉屏| 鄂托克前旗| 遂宁市| 吉木萨尔县| 河源市| 德钦县| 长垣县| 黄梅县| 博罗县| 韶关市| 双桥区| 昌宁县| 丰原市| 闽清县| 宁乡县| 烟台市| 余姚市|