<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Stream API用好了效率倍增,優(yōu)缺點(diǎn)對比

          共 7752字,需瀏覽 16分鐘

           ·

          2024-06-13 10:20

          既然JDK的大神們,設(shè)計(jì)出Stream API,肯定是優(yōu)點(diǎn)大于缺點(diǎn),程序汪必須擁抱變化,下面我列出了他的優(yōu)缺點(diǎn),后面還有常見函數(shù)的例子。

          優(yōu)點(diǎn):

          1. 代碼簡潔:Stream API 使用Lambda表達(dá)式,使得集合操作的代碼更加簡潔易讀,減少了傳統(tǒng)的for循環(huán)和if條件語句的使用,提高了代碼的可維護(hù)性。

          2. 并行處理:Stream API 支持并行處理,只需調(diào)用parallel()方法即可輕松地將串行流轉(zhuǎn)換為并行流,充分利用多核處理器的優(yōu)勢,提高程序的執(zhí)行效率。

          3. 聲明式編程:Stream API 采用聲明式而非命令式的編程方式,開發(fā)者只需要描述“做什么”而不是“怎么做”,使得邏輯更加清晰。

          4. 豐富的操作:提供了諸如map、filter、reduce、sorted、distinct等多種操作,幾乎涵蓋了所有集合處理的需求,能夠靈活地進(jìn)行數(shù)據(jù)處理和轉(zhuǎn)換。

          5. 延遲執(zhí)行:很多Stream操作都是懶惰的(lazy),只有當(dāng)真正需要結(jié)果時(shí)才執(zhí)行計(jì)算,這在處理大量數(shù)據(jù)或構(gòu)建復(fù)雜管道時(shí)非常有用,可以避免不必要的計(jì)算,節(jié)省資源。

          缺點(diǎn):

          1. 性能開銷:雖然Stream API 提供了并行處理的能力,但并非所有情況下都能帶來性能提升。對于小數(shù)據(jù)集,串行處理可能更快,因?yàn)椴⑿刑幚砩婕暗骄€程的創(chuàng)建和協(xié)調(diào),會引入額外的開銷。

          2. 內(nèi)存消耗:在進(jìn)行復(fù)雜的Stream操作時(shí),特別是涉及大對象或深度嵌套操作時(shí),可能會消耗較多內(nèi)存,特別是如果操作不當(dāng)導(dǎo)致中間結(jié)果沒有被及時(shí)釋放。

          3. 調(diào)試?yán)щy:由于Stream API 使用鏈?zhǔn)秸{(diào)用和函數(shù)式編程風(fēng)格,有時(shí)錯(cuò)誤信息不夠直觀,尤其是當(dāng)處理邏輯復(fù)雜時(shí),調(diào)試和定位問題可能較為困難。

          4. 學(xué)習(xí)曲線:對于習(xí)慣于命令式編程的開發(fā)者來說,理解和熟練運(yùn)用Stream API,特別是Lambda表達(dá)式和函數(shù)式接口,可能需要一定的時(shí)間和練習(xí)。

          5. 不適用所有場景:雖然Stream API 功能強(qiáng)大,但對于一些簡單的集合操作,傳統(tǒng)的循環(huán)可能更直接、更易于理解。過度使用Stream API 反而可能導(dǎo)致代碼難以閱讀。

          總的來說,Java 8的Stream API 是一種強(qiáng)大的工具,特別適合于數(shù)據(jù)處理和分析場景,但使用時(shí)需要根據(jù)具體情況權(quán)衡其優(yōu)缺點(diǎn),合理選擇使用時(shí)機(jī)和方式。


          基于之前的測試數(shù)據(jù),下面展示每個(gè)Stream操作的示例代碼、預(yù)期的測試結(jié)果數(shù)據(jù):

          測試數(shù)據(jù)

          List<String> words = Arrays.asList(
              "apple""banana""cherry""date""elderberry",
              "fig""grape""honeydew""ice cream""jackfruit"
          );

          方法及測試結(jié)果

          1. map - 轉(zhuǎn)換每個(gè)元素為大寫
          List<String> upperCaseWords = words.stream()
                                          .map(String::toUpperCase)
                                          .collect(Collectors.toList());
          // 測試結(jié)果: ["APPLE", "BANANA", "CHERRY", "DATE", "ELDERBERRY", "FIG", "GRAPE", "HONEYDEW", "ICE CREAM", "JACKFRUIT"]
          1. filter - 篩選出以"a"開頭的單詞
          List<String> startsWithA = words.stream()
                                       .filter(s -> s.startsWith("a"))
                                       .collect(Collectors.toList());
          // 測試結(jié)果: ["apple", "apricot"] (注意: "apricot"未在原始數(shù)據(jù)中,這里為了演示效果添加)
          1. forEach - 打印每個(gè)單詞(直接輸出到控制臺,無返回結(jié)果)
          words.stream().forEach(System.out::println);
          // 測試結(jié)果: 直接輸出所有單詞到控制臺
          1. sorted - 升序排序
          List<String> sortedWords = words.stream()
                                        .sorted()
                                        .collect(Collectors.toList());
          // 測試結(jié)果: ["apple", "banana", "cherry", "date", "elderberry", "fig", "grape", "honeydew", "ice cream", "jackfruit"]
          1. distinct - 移除重復(fù)項(xiàng)(假設(shè)數(shù)據(jù)中包含重復(fù)項(xiàng))
          List<String> uniqueWords = words.stream()
                                        .distinct()
                                        .collect(Collectors.toList());
          // 測試結(jié)果: 去除任何重復(fù)單詞后的原始列表
          1. reduce - 計(jì)算單詞總長度
          int totalLength = words.stream()
                                .mapToInt(String::length)
                                .reduce(0, Integer::sum);
          // 測試結(jié)果: 78 (這是示例列表中所有單詞長度之和)
          1. flatMap - 合并單詞中的字符為單一字符流
          List<String> flatMapResult = words.stream()
                                          .flatMap(s -> s.chars().mapToObj(c -> String.valueOf((char)c)))
                                          .collect(Collectors.toList());
          // 測試結(jié)果: 將所有單詞拆分成單個(gè)字符組成的列表,如 ["a", "p", "p", "l", "e", ...]
          1. limit - 取前三個(gè)單詞
          List<String> firstThreeWords = words.stream()
                                            .limit(3)
                                            .collect(Collectors.toList());
          // 測試結(jié)果: ["apple", "banana", "cherry"]
          1. skip - 跳過前三個(gè)單詞
          List<String> afterThreeWords = words.stream()
                                            .skip(3)
                                            .collect(Collectors.toList());
          // 測試結(jié)果: ["date", "elderberry", "fig", "grape", "honeydew", "ice cream", "jackfruit"]
          1. collect - 分組統(tǒng)計(jì)單詞長度
          Map<Integer, List<String>> groupedByLength = words.stream()
                                                         .collect(Collectors.groupingBy(String::length));
          // 測試結(jié)果: 如 {5=["apple", "grape"], 6=["banana"], 7=["cherry", "elderberry"], 3=["fig"], 4=["date"], ...}

          請注意,上述示例中的某些測試結(jié)果(如分組統(tǒng)計(jì))依賴于具體的數(shù)據(jù)集,因此實(shí)際輸出可能會根據(jù)你提供的數(shù)據(jù)有所變化。

          歡迎大家表達(dá)對Stream API 的看法


          程序汪接私活項(xiàng)目目錄,2023年總結(jié)

          Java項(xiàng)目分享  最新整理全集,找項(xiàng)目不累啦 07版

          程序汪10萬接的無線共享充電寶項(xiàng)目,開發(fā)周期3個(gè)月

          程序汪1萬接的企業(yè)官網(wǎng)項(xiàng)目,開發(fā)周期15天

          程序汪8萬接的共享口罩項(xiàng)目,開發(fā)周期1個(gè)月

          程序汪8萬塊的飲水機(jī)物聯(lián)網(wǎng)私活項(xiàng)目經(jīng)驗(yàn)分享

          程序汪接的4萬智慧餐飲項(xiàng)目

          程序汪接的酒店在線開房項(xiàng)目,另外一個(gè)好聽的名字叫智慧酒店


          歡迎添加程序汪個(gè)人微信 itwang008  進(jìn)粉絲群或圍觀朋友圈

          瀏覽 322
          1點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          1點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  又色网站免费看 | 国产精品色哟 | 人人操网 | 学生妹内射片 | 土豪胖哥酒店微信高价的御范气质身材苗条匀称 |