Java中的stream流介紹與使用

一、Stream 的基礎概念

  1. 定義與特性

    • Stream 是單向數據流,對集合或數組進行高效處理,不存儲數據,而是通過操作鏈生成新 Stream。
    • 不可變性:原始數據源不被修改,所有操作均返回新 Stream。
    • 延遲執行:中間操作(如 filter)不會立即執行,需終端操作(如 collect)觸發計算。
  2. 核心優勢

    • 簡潔性:通過鏈式調用簡化復雜邏輯(如 map + filter)。
    • 高效性:支持并行處理(parallelStream()),充分利用多核性能。
    • 靈活性:提供豐富的操作符(如 flatMap 處理嵌套集合)。

二、Stream 的創建方式

  1. 從集合/數組創建

    List list = Arrays.asList("Java", "Python", "C++");
    Stream listStream = list.stream();  // 集合轉Stream
    Stream arrayStream = Arrays.stream(new String[]{"A", "B"});  // 數組轉Stream
    
  2. 其他創建方式

    • 空 Stream:Stream.empty()(避免返回 null)。
    • 構造器:Stream.builder().add("A").build()
    • 生成器:
      Stream generated = Stream.generate(() -> "data").limit(5);  // 無限流截斷
      Stream iterated = Stream.iterate(1, n -> n + 1).limit(10);  // 遞增生成
      

三、Stream 的核心操作分類

1. 中間操作(Intermediate Operations)

操作作用示例代碼
filter篩選元素list.stream().filter(s -> s.length() > 3) // 篩選長度>3的字符串
map轉換元素類型或值.map(String::toUpperCase) // 轉換為大寫
sorted排序.sorted(Comparator.naturalOrder()) // 自然排序
flatMap扁平化嵌套集合List> nestedList; nestedList.stream().flatMap(List::stream)
distinct去重.distinct() // 基于 equals() 去重

2. 終端操作(Terminal Operations)

操作作用示例代碼
collect收集結果為集合或對象.collect(Collectors.toList()) // 轉為List
reduce歸約操作(求和、拼接等)Stream.of(1,2,3).reduce(0, Integer::sum) // 結果為6
forEach遍歷元素.forEach(System.out::println) // 打印所有元素
count統計元素數量.count() // 返回Long類型總數

四、實戰場景與示例

  1. 數據篩選與轉換

    List員工列表 = ...;
    List names = 員工列表.stream().filter(e -> e.getAge() > 30).map(E員工::getName).collect(Collectors.toList());  // 篩選年齡>30的員工姓名
    
  2. 分組統計

    Map groupedByDep = 員工列表.stream().collect(Collectors.groupingBy(E員工::getDepartment));  // 按部門分組
    
  3. 雙列集合處理

    Map map = new HashMap<>();
    Stream> entryStream = map.entrySet().stream();
    

五、進階特性與注意事項

  1. 并行流(Parallel Streams)

    • 通過 parallelStream() 啟用多線程處理,適用于大數據量場景。
    • 注意線程安全問題,避免非線程安全集合(如 ArrayList)的并發修改。
  2. 基本類型專用流

    • IntStreamLongStreamDoubleStream 優化內存和性能,避免自動裝箱開銷:
      IntStream.range(1, 100).sum();  // 計算1-99的和
      
  3. 避免常見錯誤

    • 多次使用終端操作:Stream 一旦被終端操作消費,不可復用。
    • 無限流處理:需結合 limit() 截斷,防止內存溢出。

六、總結

Java Stream API 通過函數式編程范式,顯著提升了集合操作的簡潔性和性能。合理使用 mapfiltercollect 等操作,結合并行流和基本類型流優化,可高效處理復雜數據場景。開發者需注意流的生命周期和線程安全,以充分發揮其優勢。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/81663.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/81663.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/81663.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

OCR身份證識別(正反面)_個人證照OCR識別_開放API接口使用指南

一、接口簡介 在數字化時代&#xff0c;快速準確地提取身份證信息變得尤為重要。**萬維易源提供的“身份證OCR識別”API接口&#xff0c;能夠快速提取二代居民身份證正反面的所有字段信息&#xff0c;包括姓名、性別、民族、出生日期、住址、身份證號、簽發機關、有效期限等。…

25年新版潮乎盲盒系統源碼 盲盒商城系統前端分享

盲盒系統市場的前景一直都很不錯&#xff0c;最近很多問我有沒有盲盒源碼的客戶&#xff0c;下面給大家分享一個新版潮乎盲盒源碼&#xff01; 這款盲盒源碼系統 前端Uniapp 后端使用了Laravel框架進行開發。Laravel是一個流行的PHP框架&#xff0c;具有強大的功能和易于使用的…

Transformer四模型回歸打包(內含NRBO-Transformer-GRU、Transformer-GRU、Transformer、GRU模型)

Transformer四模型回歸打包&#xff08;內含NRBO-Transformer-GRU、Transformer-GRU、Transformer、GRU模型&#xff09; 目錄 Transformer四模型回歸打包&#xff08;內含NRBO-Transformer-GRU、Transformer-GRU、Transformer、GRU模型&#xff09;預測效果基本介紹程序設計參…

Axure疑難雜癥:利用中繼器制作三級下拉菜單(邏輯判斷進階)

親愛的小伙伴,在您瀏覽之前,煩請關注一下,在此深表感謝! Axure產品經理精品視頻課已登錄CSDN可點擊學習https://edu.csdn.net/course/detail/40420 課程主題:三級下拉菜單 主要內容:條件篩選時的邏輯判斷思維,中繼器使用 應用場景:復合條件下的下拉列表制作 案例展…

Nginx 核心功能之正反代理

目錄 一、Nginx 二、正向代理 三、反向代理 四、Nginx 緩存 1. 緩存功能的核心原理和緩存類型 2. 代理緩存功能設置 五、Nginx rewrite和正則 &#xff08;1&#xff09;Nginx 正則 &#xff08;2&#xff09;nginx location &#xff08;3&#xff09;Rewrite &…

ssh連接云服務器記錄

文章目錄 1. 背景2. ssh連接2.1 win 下通過終端工具進行連接2.2 Linux下通過ssh指令連接2.3 ssh使用publickey來連接 ssh連接云服務器記錄 1. 背景 最近開始接觸docker技術、mysql技術&#xff0c;加上本人工作基本都在Linux下進行&#xff0c;因此需要一套Linux環境進行練習。…

軟考-軟件設計師中級備考 12、軟件工程

一、軟件工程概述 定義&#xff1a;軟件工程是一門研究用工程化方法構建和維護有效的、實用的和高質量軟件的學科。它涉及到軟件的開發、測試、維護、管理等多個方面&#xff0c;旨在運用一系列科學方法和技術手段&#xff0c;提高軟件的質量和開發效率&#xff0c;降低軟件開…

【多次彈出“獲取打開此tobiieyetracking鏈接的應用”的窗口】解決辦法

使用聯想R9000P突然出現“獲取打開此tobiieyetracking鏈接的應用”的窗口&#xff0c;每隔幾分鐘就彈一次&#xff0c;特別惡心人&#xff0c;解決辦法&#xff1a; 找到【此電腦】&#xff0c;鼠標右鍵【管理】&#xff1b;選擇【服務】&#xff0c;如下所示&#xff0c;找到…

項目選擇的三個核心因素:市場前景、競爭優勢和成本控制

能保持持續增長和賺錢的項目就是好項目。 每個創業者創業之初&#xff0c;遇到的第一個難題就是選擇做什么項目&#xff1f; 俗話說&#xff1a;方向不對&#xff0c;努力白費。 選錯項目&#xff0c;意味著你所有的付出都是打水漂。 能做的項目那么多&#xff0c;在沒有價值…

裸機 Kubernetes 集群負載均衡器:MetalLB 深度解析與實戰指南

一、引言 在云原生架構中&#xff0c;Kubernetes 默認的負載均衡能力依賴于云廠商&#xff08;如 AWS ELB、GCP LB&#xff09;&#xff0c;但在裸機或本地數據中心環境中&#xff0c;這一功能缺失導致 LoadBalancer 類型的 Service 始終處于 Pending 狀態。此時&#xff0c;M…

2025年- H20-Lc128-240. 搜索二維矩陣 II(矩陣)---java版

1.題目描述 2.思路 遍歷矩陣&#xff0c;然后如果遇到矩陣中的值正好等于target&#xff0c;輸出true。否則&#xff0c;輸出false。 3.代碼 public class H240 {public boolean searchMatrix(int[][] matrix, int target) {//1.計算出總的行值&#xff0c;總的列值。int mm…

系統架構設計師:設計模式——行為設計模式

一、行為設計模式 行為模式涉及算法和對象間職責的分配。行為模式不僅描述對象或類的模式&#xff0c;還描述它們之間的通信模式。這些模式刻畫了在運行時難以跟蹤的、復雜的控制流。它們將用戶的注意力從控制流轉移到對象間的聯系方式上來。 行為類模式使用繼承機制在類間分…

java springboot實現MCP Server SSE

參考&#xff1a; https://juejin.cn/post/7491881721278529570 SpringAI 實現 SSE MCP Server項目 - Auler - 博客園 springboot-MCPserver-JUnit: 使用springboot支持mcp項目搭建&#xff0c;同時有著便捷的單元測試來進行敏捷開發對話即服務&#xff1a;Spring BootMCP讓…

LeetCode 熱題 100 48. 旋轉圖像

LeetCode 熱題 100 | 48. 旋轉圖像 大家好&#xff0c;今天我們來解決一道經典的算法題——旋轉圖像。這道題在LeetCode上被標記為中等難度&#xff0c;要求我們將一個 n n 的二維矩陣&#xff08;圖像&#xff09;順時針旋轉90度&#xff0c;并且必須原地修改矩陣&#xff0…

嵌入式按鍵原理、中斷過程與中斷程序設計(鍵盤掃描程序)

按鍵去抖動 ? 通常的按鍵所用開關為機械彈性開關,當機械觸點斷開、閉合時&#xff0c;電壓信號波型如下圖。由于機械觸點的彈性作用&#xff0c;一個按鍵開關在閉合時不會馬上穩定地接通&#xff0c;在斷開時也不會一下子斷開。因而在閉合及斷開的瞬間均伴隨有一連串的抖動。…

數據結構之哈夫曼樹

8.哈夫曼樹 8.1 哈夫曼編碼 哈夫曼編碼&#xff08;Huffman Coding&#xff09;&#xff0c;又稱霍夫曼編碼&#xff0c;是一種可變字長編碼&#xff08;VLC&#xff09;方式 這種編碼方法完全依據字符出現的概率來構造異字頭的平均長度最短的碼字&#xff0c; 因此有時也被…

機器學習實操 第一部分 機器學習基礎 第5章 支持向量機(SVM)

機器學習實操 第一部分 機器學習基礎 第5章 支持向量機&#xff08;SVM&#xff09; 內容概要 第5章深入介紹了支持向量機&#xff08;SVM&#xff09;&#xff0c;這是一種功能強大且應用廣泛的機器學習模型。SVM適用于線性或非線性分類、回歸以及 novelty detection。本章詳…

Webug4.0靶場通關筆記14- 第18關 文件上傳之Nginx解析缺陷

目錄 第18關 滲透實戰 1.打開靶場 2.構造php腳本 3.源碼分析 &#xff08;1&#xff09;客戶端源碼 &#xff08;2&#xff09;服務的源碼 4.Nginx解析法滲透 &#xff08;1&#xff09;缺陷原因 &#xff08;2&#xff09;缺陷條件 &#xff08;3&#xff09;構造腳…

【QT】QT中的網絡編程(TCP 和 UDP通信)

QT中的網絡編程&#xff08;TCP 和 UDP通信&#xff09; 1.tcp1.1 tcp通信1.1.1 相比linux中tcp通信:1.1.2 QT中的tcp通信: 1.2 tcp通信流程1.2.1 服務器流程&#xff1a;1.2.1.1 示例代碼1.2.1.2 現象 1.2.2 客戶端流程&#xff1a;1.2.2.1 示例代碼1.2.2.2 現象&#xff1a; …

架構思維:使用懶加載架構實現高性能讀服務

文章目錄 一、引言二、讀服務的功能性需求三、兩大基本設計原則1. 架構盡量不要分層2. 代碼盡可能簡單 四、實戰方案&#xff1a;懶加載架構及其四大挑戰五、改進思路六、總結與思考題 一、引言 在任何后臺系統設計中&#xff0c;「讀多寫少」的業務場景占據主流&#xff1a;瀏…