国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【從零開始學(xué)習(xí)JAVA | 第二十九篇】Stream流

這篇具有很好參考價值的文章主要介紹了【從零開始學(xué)習(xí)JAVA | 第二十九篇】Stream流。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

【從零開始學(xué)習(xí)JAVA | 第二十九篇】Stream流,【從零開始學(xué)習(xí)JAVA】,學(xué)習(xí),java

目錄

前言:

Stram流:

設(shè)計目標(biāo):

使用步驟:

1.先得到一條Stream流,并把數(shù)據(jù)放上去。

2.利用Stream流中的各種API進(jìn)行操作。

使用Stream流的注意事項:

總結(jié):


前言:

? ? ? ? 本文我們將學(xué)習(xí)Stream流,他就像流水線一樣,可以對我們要處理的對象進(jìn)行逐步處理,最終達(dá)到我們想要的效果,是JAVA中的一大好幫手,值得我們了解和掌握。

Stram流:

? ? ? ??Stream流的核心思想是函數(shù)式編程,它倡導(dǎo)將數(shù)據(jù)處理過程看作是一系列的轉(zhuǎn)換操作。這種思想與傳統(tǒng)的命令式編程方式不同,傳統(tǒng)的命令式編程方式強(qiáng)調(diào)對數(shù)據(jù)的直接操作,而函數(shù)式編程則更加注重對數(shù)據(jù)的轉(zhuǎn)換和操作過程。

在使用Stream流時,我們可以將數(shù)據(jù)源(如集合或數(shù)組)看作是一組元素的流,通過一系列的中間操作(如過濾、映射、排序等),最終到達(dá)終止操作(如匹配、歸約、收集等)來處理數(shù)據(jù)。

設(shè)計目標(biāo):

????????Stream流的設(shè)計目標(biāo)是提供一種簡潔、高效的數(shù)據(jù)處理方式,使得代碼更加可讀、易于理解和維護(hù)。它的思想是將數(shù)據(jù)處理過程分解為多個步驟,每個步驟都是一種轉(zhuǎn)換操作,可以對數(shù)據(jù)進(jìn)行過濾、映射、排序等操作,最終得到所需要的結(jié)果。

????????通過使用Stream流,我們可以避免傳統(tǒng)的循環(huán)和條件判斷,將復(fù)雜的數(shù)據(jù)處理邏輯轉(zhuǎn)化為簡潔、清晰的方法鏈?zhǔn)秸{(diào)用,使得代碼更加簡潔和可讀。

????????另外,Stream流還支持并行處理,可以將大數(shù)據(jù)集劃分為多個子集并行執(zhí)行操作,提高處理效率。這種并行處理的方式可以很好地利用多核處理器的優(yōu)勢,使得數(shù)據(jù)處理更加高效。

????????總而言之,Stream流的思想是通過函數(shù)式編程的方式,將數(shù)據(jù)處理過程看作是一系列的轉(zhuǎn)換操作,實現(xiàn)簡潔、高效和易于理解的數(shù)據(jù)處理。它的設(shè)計目標(biāo)是提供一種優(yōu)雅和強(qiáng)大的數(shù)據(jù)處理方式,使得開發(fā)人員能夠更加專注于數(shù)據(jù)轉(zhuǎn)換的邏輯,而無需關(guān)心底層的迭代和條件判斷。一般情況下,Stream流會搭配Lambda表達(dá)式一起運用,以此來簡化集合和數(shù)組的操作。

使用步驟:

舉例:

例如我們想在一堆存儲在list中的數(shù)據(jù)中找到首字為“張”的數(shù)據(jù),按照傳統(tǒng)的寫法來講,我們需要手動遍歷每一個數(shù)據(jù),再利用list中的API進(jìn)行判斷首字母,但是Stream流的出現(xiàn),大大便捷了我們的操作

import java.util.ArrayList;

public class test01 {
    public static void main(String[] args) {
        ArrayList<String> list1 = new ArrayList<>();
        list1.add("張無忌");
        list1.add("趙敏");
        list1.add("張強(qiáng)");
        list1.add("劉三豐");

        //傳統(tǒng)方法
        for (String s : list1) {
            if(s.startsWith("張"))
            {
                System.out.println(s);
            }
        }
        //直接調(diào)用stream流
        list1.stream().filter(name->name.startsWith("張")).forEach(name->System.out.println(name));

    }
}

從這個例子中我們可以總結(jié)出調(diào)用stream流的兩步驟:

1.先得到一條Stream流,并把數(shù)據(jù)放上去。

【從零開始學(xué)習(xí)JAVA | 第二十九篇】Stream流,【從零開始學(xué)習(xí)JAVA】,學(xué)習(xí),java

2.利用Stream流中的各種API進(jìn)行操作。

1. filter(Predicate<T> predicate):根據(jù)指定的條件過濾流中的元素,返回一個新的流。

2. map(Function<T, R> mapper):對流中的每個元素進(jìn)行映射操作,返回一個新的流,新流中的元素為映射后的結(jié)果。

3. sorted():對流中的元素進(jìn)行默認(rèn)排序。

4. sorted(Comparator<T> comparator):對流中的元素按照指定的規(guī)則進(jìn)行排序。

5. distinct():去除流中的重復(fù)元素,返回一個新的流。

6. limit(long maxSize):截斷流,獲取前幾個元素。

7. skip(long n):跳過指定數(shù)量的元素,返回一個新的流。

8. forEach(Consumer<T> action):對流中的每個元素執(zhí)行指定的操作。

9. collect(Collector<T, A, R> collector):將流中的元素收集到一個結(jié)果集合中。

10. anyMatch(Predicate<T> predicate):判斷流中是否有滿足指定條件的元素。

11. allMatch(Predicate<T> predicate):判斷流中的所有元素是否都滿足指定條件。

12. noneMatch(Predicate<T> predicate):判斷流中是否沒有滿足指定條件的元素。

13. findFirst():返回流中的第一個元素。

14. findAny():返回流中的任意一個元素。

15. reduce(BinaryOperator<T> accumulator):將流中的元素按照指定的規(guī)約操作進(jìn)行歸約。

16. parallelStream():返回一個并行流,可以并行地處理流中的元素。

使用Stream流的注意事項:

1. Stream流是一次性使用的:一旦對Stream流進(jìn)行終止操作(如forEach、collect等),就不能再對同一個Stream流進(jìn)行其他操作。如果需要對同一組數(shù)據(jù)進(jìn)行多個處理步驟,需要創(chuàng)建新的Stream流。

2. 注意流的順序:Stream流的中間操作順序是很重要的,它們會按照順序被應(yīng)用到數(shù)據(jù)上。因此,在對流進(jìn)行操作時,請確保中間操作的順序是正確的,以避免出現(xiàn)錯誤的結(jié)果。

3. 及早終止流:Stream流提供了許多終止操作,如forEach、collect、reduce等。在使用這些終止操作時,應(yīng)盡量避免無限循環(huán)或大量計算,及早終止流以避免性能問題。

4. 注意流的惰性求值:Stream流采用惰性求值的方式,即在終止操作之前,中間操作不會立即執(zhí)行。這種機(jī)制可以提高性能,但也需要注意在需要及時執(zhí)行的情況下使用及時觸發(fā)的操作如count、findFirst等。

5. 避免空指針異常:在對流進(jìn)行操作時,需要注意空值(null)的情況,使用過濾操作時,需要考慮到空元素的處理,避免出現(xiàn)空指針異常。

6. 并行流需謹(jǐn)慎使用:Stream流支持并行處理,可以通過parallelStream方法來獲得并行流。但在使用并行流時,需要注意線程安全和性能問題,確保代碼在并行執(zhí)行時不會出現(xiàn)競態(tài)條件或?qū)е滦阅芟陆怠?/p>

7. 適度使用流操作:Stream流提供了豐富的操作方法,但并不意味著所有情況下都應(yīng)該使用流操作。在簡單的數(shù)據(jù)處理場景中,使用傳統(tǒng)的循環(huán)方式可能更加直觀和高效。

總結(jié):

? ? ? ? Stream流常常與lambda表達(dá)式以及鏈?zhǔn)骄幊痰乃枷虢Y(jié)合起來,大大降低了代碼的繁雜程度,是一個很好的選擇,但是他的缺點就是降低了代碼的可讀性,因此我們要合理的使用Stream流,在效率與可讀性之間做好一個把握。

如果我的內(nèi)容對你有幫助,請點贊,評論,收藏。創(chuàng)作不易,大家的支持就是我堅持下去的動力!

【從零開始學(xué)習(xí)JAVA | 第二十九篇】Stream流,【從零開始學(xué)習(xí)JAVA】,學(xué)習(xí),java

?文章來源地址http://www.zghlxwxcb.cn/news/detail-583288.html

到了這里,關(guān)于【從零開始學(xué)習(xí)JAVA | 第二十九篇】Stream流的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【從零開始學(xué)習(xí)JAVA | 第二十二篇】BigInteger

    【從零開始學(xué)習(xí)JAVA | 第二十二篇】BigInteger

    目錄 ?前言: ?BigInterger: BigInteger常見的方法: 總結(jié): ? ? ? ? 本篇我們將介紹BigInteger這個比較實用一點的API,這個API在我們實際寫項目中都是很實用的API,因此大家應(yīng)該對這個API有更加熟練的掌握。 在Java中,整數(shù)類型int和long的取值范圍是有限的,超出該范圍的整數(shù)無法

    2024年02月15日
    瀏覽(36)
  • 從零開始學(xué)習(xí) Java:簡單易懂的入門指南之Stream流(二十七)

    從零開始學(xué)習(xí) Java:簡單易懂的入門指南之Stream流(二十七)

    1.體驗Stream流 案例需求 按照下面的要求完成集合的創(chuàng)建和遍歷 創(chuàng)建一個集合,存儲多個字符串元素 把集合中所有以\\\"張\\\"開頭的元素存儲到一個新的集合 把\\\"張\\\"開頭的集合中的長度為3的元素存儲到一個新的集合 遍歷上一步得到的集合 原始方式示例代碼 使用Stream流示例代碼

    2024年02月08日
    瀏覽(20)
  • 【從零開始學(xué)習(xí)JAVA | 第二十三篇】集合體系結(jié)構(gòu)

    【從零開始學(xué)習(xí)JAVA | 第二十三篇】集合體系結(jié)構(gòu)

    目錄 前言: 單列集合:? ? ? set與list的區(qū)別: 雙列集合: map的特點: 總結(jié): ? ? ? ? ? ? ? ? ? JAVA中為我們提供了很多集合,這些集合都有自己很獨特的特點,因此我們要學(xué)習(xí)所有的集合,但是在學(xué)習(xí)所有的集合之前,我們還是先為大家介紹一下JAVA的集合體系結(jié)構(gòu),這

    2024年02月16日
    瀏覽(17)
  • 【從零開始學(xué)習(xí)JAVA | 第二十七篇】JAVA期末練習(xí)(PTA)

    【從零開始學(xué)習(xí)JAVA | 第二十七篇】JAVA期末練習(xí)(PTA)

    目錄 前言: R7-5 Count the letters in a string (統(tǒng)計字符串中的字符) R7-1 找素數(shù) R7-3 電話號碼同步(Java) 總結(jié): ????????臨近期末,我也更新一下PTA上的JAVA大題,希望各位都可以考出一個好的成績。 (Count the letters in a string) (統(tǒng)計字符串中的字符) Write a method that counts th

    2024年02月16日
    瀏覽(124)
  • 【從零開始學(xué)習(xí)JAVA | 第二十篇】常見API介紹 Math

    【從零開始學(xué)習(xí)JAVA | 第二十篇】常見API介紹 Math

    目錄 前言: ?MATH: Math類中的常用方法: 總結(jié): ? ? ? ? ? ? ? ? 本篇往后我們會詳細(xì)介紹一些常用的API,今天我們介紹的是Math的常用方法。但是其實我們不需要記住所有的方法,在日常工作中自己學(xué)會查詢API文檔就可以了。 Math類是Java中提供的一個標(biāo)準(zhǔn)類, 它包含了許多

    2024年02月15日
    瀏覽(27)
  • 【從零開始學(xué)習(xí)JAVA | 第二十一篇】常見API介紹 System

    【從零開始學(xué)習(xí)JAVA | 第二十一篇】常見API介紹 System

    目錄 前言: System: System類中靜態(tài)方法: 總結(jié): ? ? ????????? ? system 是一個很底層的 API,是一個工具類, 提供了一些與系統(tǒng)相關(guān)的方法 。他在我們寫項目的時候提供了一些非常實用的方法,本篇將會介紹一些實用的system API 的方法調(diào)用。 System類是Java語言提供的一個

    2024年02月15日
    瀏覽(90)
  • JavaScript從入門到精通系列第二十九篇:正則表達(dá)式初體驗

    JavaScript從入門到精通系列第二十九篇:正則表達(dá)式初體驗

    ? 文章目錄 一:正則表達(dá)式 1:簡介 2:正則表達(dá)式 3:檢查字符串 ? ? ? ? 正則表達(dá)式應(yīng)用的場景是什么呢?比方說檢查客戶注冊的電子郵件的格式的標(biāo)準(zhǔn)性。讓計算機(jī)基于固定的格式,去檢測用戶輸入的電子郵件地址是不是正確的電子郵件地址。 ? ? ? ? 正則表達(dá)式用于

    2024年02月06日
    瀏覽(30)
  • 第二十九篇、基于Arduino uno,控制MP3Player mini模塊播放音樂——結(jié)果導(dǎo)向

    第二十九篇、基于Arduino uno,控制MP3Player mini模塊播放音樂——結(jié)果導(dǎo)向

    說明:通電后播放對應(yīng)的歌曲,可以選擇循環(huán)播放還是播放一次,也可以通過串口指定播放對應(yīng)的音樂,如果是你想要的,可以接著往下看。 說明:雖然MP3Player mini模塊有很多型號,但是原理和代碼都是適用的。 說明:只需要連接六根線。 引腳圖: uno————MP3Player mini模

    2024年02月03日
    瀏覽(19)
  • 【從零開始學(xué)JAVA | 第二十四篇】單列集合的遍歷

    【從零開始學(xué)JAVA | 第二十四篇】單列集合的遍歷

    目錄 前言: 單列集合的遍歷方式: 迭代器遍歷: 增強(qiáng)for遍歷: lambda方法遍歷:? 總結(jié): 本篇我們會講解關(guān)于單列集合的幾種遍歷方式,遍歷集合可以說是對于集合要求掌握的最低技能,因此我們要熟練的掌握遍歷集合的方式。 在這里我們不講for循環(huán)遍歷,for循環(huán)無法對單

    2024年02月16日
    瀏覽(90)
  • 【從零開始學(xué)習(xí)C++ | 第二十一篇】C++新增特性 (上)

    【從零開始學(xué)習(xí)C++ | 第二十一篇】C++新增特性 (上)

    目錄 ?前言: 委托構(gòu)造函數(shù): 類內(nèi)初始化: 空指針: 枚舉類: 總結(jié): ? ? ? ? C++的學(xué)習(xí)難度大,內(nèi)容繁多。因此我們要及時掌握C++的各種特性,因此我們更新本篇文章,向大家介紹C++的新增特性。 委托構(gòu)造函數(shù)是指一 個類的構(gòu)造函數(shù)調(diào)用另一個類的構(gòu)造函數(shù),以減少代

    2024年02月13日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包