<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>

          10 個 Java Stream 頂級技巧,大量簡化代碼!

          共 6470字,需瀏覽 13分鐘

           ·

          2023-10-16 05:44

          來源:medium.com/javarevisited/10-java-stream-tips-must-read-2063a84af3be

          ?? 歡迎加入小哈的星球 ,你將獲得: 專屬的項目實戰(zhàn)/ Java 學(xué)習(xí)路線 / 一對一提問 / 學(xué)習(xí)打卡


          目前, 正在星球內(nèi)部帶小伙伴做第一個項目:前后端分離博客,手摸手,后端 + 前端全棧開發(fā),從 0 到 1 講解每個功能點開發(fā)步驟,1v1 答疑,直到項目上線。目前已更新了94小節(jié),累計13w+字,講解圖:630張,還在持續(xù)爆肝中.. 后續(xù)還會上新更多項目,如秒殺系統(tǒng), 在線商城, IM即時通訊等,戳我加入學(xué)習(xí),已有290+小伙伴加入(一頓飯錢)

          Java Stream API對于 Java 開發(fā)人員來說就像一把瑞士軍刀 — 它用途廣泛、結(jié)構(gòu)緊湊,并且可以輕松處理各種任務(wù)。

          它為開發(fā)人員提供了一種函數(shù)式和聲明式的方式來表達(dá)復(fù)雜的數(shù)據(jù)轉(zhuǎn)換和操作,使代碼更加簡潔和富有表現(xiàn)力。

          但能力越大,責(zé)任越大,有效地使用Stream API需要對最佳實踐和常見陷阱有深入的了解。

          今天,我們將探討使用Java Stream API的一些最佳實踐,并展示如何釋放這個神奇工具的全部潛力。

          1. 使用原始流以獲得更好的性能

          使用 int、long 和 double 等基本類型時,請使用IntStream、LongStream 和 DoubleStream 等基本流,而不是 Integer、Long 和 Double 等裝箱類型流。原始流可以通過避免裝箱和拆箱的成本來提供更好的性能。

          var array = new int[]{1, 2, 3, 4, 5};
          var sum = Arrays.stream(array)
                         .sum();

          2. 避免嵌套流

          最佳實踐是避免嵌套流,因為它可能導(dǎo)致代碼難以閱讀和理解。相反,嘗試將問題分解為更小的部分,并使用中間集合或局部變量來存儲中間結(jié)果。

          var list1 = Arrays.asList("apple""banana""cherry");
          var list2 = Arrays.asList("orange""pineapple""mango");
          var result = Stream.concat(list1.stream(), list2.stream())
                            .filter(s -> s.length() > 5)
                            .collect(Collectors.toList());

          3. 謹(jǐn)慎使用并行流

          并行流可以在處理大量數(shù)據(jù)時提供更好的性能,但它們也會引入開銷和競爭條件。謹(jǐn)慎使用并行流,并考慮數(shù)據(jù)大小、操作復(fù)雜性和可用處理器數(shù)量等因素。

          var list = Arrays.asList(1, 2, 3, 4, 5);
          var sum = list.parallelStream().reduce(0, Integer::sum);

          4. 使用惰性求值以獲得更好的性能

          Stream API 支持延遲計算,這意味著在調(diào)用終端操作之前不會執(zhí)行中間操作。作為最佳實踐,嘗試使用惰性計算來通過減少不必要的計算來提高性能。

          var list = Arrays.asList(1, 2, 3, 4, 5);
          var result = list.stream()
                           .filter(n -> n > 3)
                           .findFirst();

          5.避免副作用

          Stream API 旨在對數(shù)據(jù)執(zhí)行功能操作。避免引入副作用,例如修改流外部的變量或執(zhí)行 I/O 操作,因為這可能會導(dǎo)致不可預(yù)測的行為并降低代碼可讀性。

          var list = Arrays.asList("apple""banana""cherry");
          var count = 0;
          list.stream()
              .filter(s -> s.startsWith("a"))
              .forEach(s -> count++);

          6. 將流與不可變對象一起使用

          Stream API 最適合不可變對象。使用不可變對象可確保流的狀態(tài)在處理過程中不會被修改,這可以帶來更可預(yù)測的行為和更好的代碼可讀性

          var list = Arrays.asList("apple""banana""cherry");
          var result = list.stream()
                           .map(String::toUpperCase)
                           .collect(Collectors.toList());

          7. 在map()之前使用filter()以避免不必要的處理

          如果你的流可能包含大量不符合你的條件的元素,請在 map() 之前使用 filter() 以避免不必要的處理。這可以提高代碼的性能。

          var list = Arrays.asList(1, 2, 3, 4, 5);
          var filteredList = list.stream()
                                 .filter(i -> i % 2 == 0)
                                 .map(i -> i * 2)
                                 .collect(Collectors.toList());

          8. 優(yōu)先選擇方法引用而不是 lambda 表達(dá)式

          與使用 lambda 表達(dá)式相比,方法引用可以使我們的代碼更加簡潔和可讀。在合適的情況下,優(yōu)先使用方法引用代替 lambda 表達(dá)式。

          var list = Arrays.asList(1, 2, 3, 4, 5);
          var sum = list.stream()
                        .reduce(0, Integer::sum);

          9. 使用distinct()刪除重復(fù)項

          如果你的流可能包含重復(fù)元素,請使用distinct() 操作來刪除它們

          var list = Arrays.asList(1, 2, 3, 3, 4, 5, 5);
          var distinctList = list.stream()
                                 .distinct()
                                 .collect(Collectors.toList());

          10. 謹(jǐn)慎使用sorted()

          Sorted() 操作可能會很昂貴,尤其是對于大型流。僅在必要時謹(jǐn)慎使用。如果你確定輸入的數(shù)據(jù)已經(jīng)排序,則可以跳過此操作。

          var  list  = Arrays.asList( 3 , 2 , 1 ); 
          var  SortedList  = list.stream() 
                               .sorted() 
                               .collect(Collectors.toList());

          總之,Java Stream API 是一個強(qiáng)大而靈活的工具,可以顯著簡化數(shù)據(jù)處理任務(wù)的代碼。

          通過遵循本文中討論的提示,可以確保代碼既高效又有效。但是,請務(wù)必記住,有效使用 Java Stream API 需要充分了解其功能和限制。

          不斷學(xué)習(xí)和探索 Java Stream API 的世界,釋放其全部潛力。

          ?? 歡迎加入小哈的星球 ,你將獲得: 專屬的項目實戰(zhàn) / Java 學(xué)習(xí)路線 / 一對一提問 / 學(xué)習(xí)打卡


          目前, 正在星球內(nèi)部帶小伙伴做第一個項目:前后端分離博客,手摸手,后端 + 前端全棧開發(fā),從 0 到 1 講解每個功能點開發(fā)步驟,1v1 答疑,直到項目上線。目前已更新了94小節(jié),累計13w+字,講解圖:630張,還在持續(xù)爆肝中.. 后續(xù)還會上新更多項目,如秒殺系統(tǒng), 在線商城, IM即時通訊等,戳我加入學(xué)習(xí),已有290+小伙伴加入(一頓飯錢)

             
             

               
               
                  
                  

          1. SpringBoot 分布式驗證碼登錄方案

          2. 巧用 Redis,實現(xiàn)微博 Feed 流功能!

          3. Kubernetes 實戰(zhàn):使用 k8s+jenkins 實現(xiàn) CICD

          4. 誰家面試往死里問 Swagger 啊?

          最近面試BAT,整理一份面試資料Java面試BATJ通關(guān)手冊,覆蓋了Java核心技術(shù)、JVM、Java并發(fā)、SSM、微服務(wù)、數(shù)據(jù)庫、數(shù)據(jù)結(jié)構(gòu)等等。

          獲取方式:點“在看”,關(guān)注公眾號并回復(fù) Java 領(lǐng)取,更多內(nèi)容陸續(xù)奉上。

          PS:因公眾號平臺更改了推送規(guī)則,如果不想錯過內(nèi)容,記得讀完點一下在看,加個星標(biāo),這樣每次新文章推送才會第一時間出現(xiàn)在你的訂閱列表里。

          “在看”支持小哈呀,謝謝啦

          瀏覽 1739
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <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>
                  国产一级a一级a看免费视频 | 最新欧美日韩 | 性爱一级 | 人人草在线视频 | 成人无码久久久久毛片 |