Java Stream流:高效數據處理全解析

Java Stream 流詳解

Stream 是 Java 8 引入的 API,用于高效處理集合數據(如 ListSetMap 等)。它支持函數式編程風格,能實現復雜的查詢、過濾、映射等操作,并支持并行處理以提升性能。


核心特點
  1. 非存儲數據結構:不存儲數據,僅通過計算管道傳遞數據。
  2. 不修改源數據:所有操作生成新流,不影響原始集合。
  3. 惰性求值:中間操作延遲執行,直到遇到終止操作才觸發計算。
  4. 可消費性:流只能被遍歷一次,終止操作后流即失效。

操作分類
類型操作示例
創建流從集合/數組生成流list.stream(), Arrays.stream(array)
中間操作返回新流(延遲執行)filter(), map(), sorted(), distinct()
終止操作觸發計算并返回結果(非流類型)collect(), forEach(), reduce(), count()

常用操作詳解
1. 創建流
// 從集合創建
List<String> list = Arrays.asList("a", "b", "c");
Stream<String> stream1 = list.stream();// 從數組創建
String[] array = {"a", "b", "c"};
Stream<String> stream2 = Arrays.stream(array);// 直接創建
Stream<String> stream3 = Stream.of("a", "b", "c");// 生成無限流(需限制大小)
Stream<Integer> infiniteStream = Stream.iterate(0, n -> n + 1).limit(10); // 0,1,2,...,9
2. 中間操作(鏈式調用)
  • filter(Predicate<T>):過濾元素

    stream.filter(s -> s.startsWith("a")); // 保留以"a"開頭的元素
    
  • map(Function<T,R>):元素轉換

    stream.map(String::toUpperCase); // 轉為大寫 ["A","B","C"]
    
  • flatMap(Function<T,Stream<R>>):扁平化嵌套流

    List<List<String>> nestedList = Arrays.asList(Arrays.asList("a", "b"),Arrays.asList("c", "d")
    );
    nestedList.stream().flatMap(List::stream) // 合并為["a","b","c","d"].forEach(System.out::println);
    
  • distinct():去重

    Stream.of(1, 2, 2, 3).distinct(); // [1, 2, 3]
    
  • sorted():排序

    Stream.of(3, 1, 2).sorted(); // [1, 2, 3]
    
  • limit(long n):截取前 n 個元素

    Stream.iterate(0, i -> i + 1).limit(3); // [0, 1, 2]
    
3. 終止操作
  • collect(Collector):轉換為集合

    List<String> list = stream.collect(Collectors.toList()); // 轉List
    Set<String> set = stream.collect(Collectors.toSet());    // 轉Set
    
  • forEach(Consumer<T>):遍歷元素

    stream.forEach(System.out::println); // 打印每個元素
    
  • reduce():聚合計算

    Optional<Integer> sum = Stream.of(1, 2, 3).reduce((a, b) -> a + b); // 6
    
  • count():統計元素數量

    long count = stream.filter(s -> !s.isEmpty()).count();
    
  • 匹配檢查

    boolean anyMatch = stream.anyMatch(s -> s.contains("a")); // 任一元素匹配
    boolean allMatch = stream.allMatch(s -> s.length() > 0);  // 所有元素匹配
    

并行流

通過多線程加速處理大數據集:

// 創建并行流
List<String> result = list.parallelStream().filter(s -> s.length() > 2).collect(Collectors.toList());

注意:并行流需確保操作是線程安全的(如避免修改共享狀態)。


實戰示例
// 示例:從用戶列表中篩選年齡≥18的用戶,按姓名排序,提取前10個
List<User> users = ...; // 數據源List<String> result = users.stream().filter(user -> user.getAge() >= 18)  // 過濾.sorted(Comparator.comparing(User::getName)) // 排序.limit(10)                           // 截取.map(User::getName)                  // 提取姓名.collect(Collectors.toList());       // 轉為List

注意事項
  1. 流不可復用:終止操作后流即關閉,再次使用會拋出 IllegalStateException
  2. 避免副作用:操作中不要修改外部變量(使用無狀態函數)。
  3. 性能考量:小數據集用順序流,大數據集用并行流(需測試驗證)。

Stream API 大幅簡化了集合操作代碼,結合 Lambda 表達式,使 Java 處理數據更簡潔高效。

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

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

相關文章

光子精密雙目3D線激光輪廓測量儀,擺脫視覺盲區,1臺更比2臺強!

光子精密雙目3D線激光輪廓測量儀&#xff08;GL-8160D&#xff09;&#xff0c;在GL-8000系列的基礎上創新升級。GL-8160D采用全新雙目單線設計&#xff0c;突破傳統3D視覺檢測限制&#xff0c;而且不受外部拼接標定誤差影響&#xff0c;有效消除單目盲區&#xff0c;抗光干擾能…

基于Linux驅動的可見光通信方案 —— 開源 OpenVLC 平臺入門(附 BeagleBone Black 驅動簡單解析)

60 美元玩轉 Li-Fi —— 開源 OpenVLC 平臺入門&#xff08;附 BeagleBone Black 及驅動解析&#xff09;一、什么是 OpenVLC&#xff1f; OpenVLC 是由西班牙 IMDEA Networks 研究所推出的開源可見光通信&#xff08;VLC / Li-Fi&#xff09;研究平臺。它把硬件、驅動、協議棧…

Git系列--4.Git分支設計規范

目錄 一、了解開發環境 1.1概念闡述 1.2系統概括圖 二、設計規范之GitFlow模型 2.1具體分支概念 2.1.1master 分? 2.1.2release 分? 2.1.3develop 分? 2.1.4feature 分? 2.1.5hotfix 分? 2.2宏觀表格 三、分支流程圖 一、了解開發環境 1.1概念闡述 對于開發人員…

【時間之外】AI在農機配件設計場景的應用

目錄 農機制造業痛點 AI場景暢想 落后就要挨打 農機制造業痛點 最近&#xff0c;我與一位在制造業摸爬滾打多年的老友相聚。酒過三巡&#xff0c;話題漸漸轉到他的事業上。他興致勃勃地跟我講起&#xff0c;自己正主導著一個規模達幾千萬的項目&#xff0c;生產基地遠在孟加…

基于定制開發開源AI智能名片與S2B2C商城小程序的旅游日志創新應用研究

摘要&#xff1a;本文探討了旅游日志在記錄旅行美景與人物中的重要性&#xff0c;結合當下數字化發展趨勢&#xff0c;引入定制開發開源AI智能名片與S2B2C商城小程序的概念。分析如何將這兩者與旅游日志風格元素相融合&#xff0c;打造一種創新的旅游記錄與分享模式&#xff0c…

XGBoosting算法詳解(Boosting思想的代表算法)

文章目錄相關文章一、Boosting思想&#xff1a;從弱到強的串行提升二、XGBoost算法思想&#xff1a;GBDT的極致優化三、XGBoost數學原理&#xff1a;從目標函數到樹分裂3.1 目標函數定義3.2 正則化項&#xff1a;控制樹的復雜度3.3 泰勒二階展開&#xff1a;簡化目標函數3.4 化…

Vue + Element UI 實現選框聯動進而動態控制選框必填

目錄 一. 需求描述 二. 解決思路 三. 代碼實現 四. 效果展示 一. 需求描述 如下圖所示&#xff0c;新增人員頁面&#xff0c;有字段"Leader DS"和"Leader DS名稱"。 現在我要在字段"Leader DS"和"Leader DS名稱"字段下方再添加一…

高通SG882G平臺(移遠),Ubuntu22編譯:1、下載代碼

不要使用Ubuntu24&#xff0c;不穩定。 docker聽著美好&#xff0c;其實也有問題。比如你給別人的時候&#xff0c;虛擬機直接給過去&#xff0c;馬上就能用。 安裝工具 sudo apt-get install -y \ diffstat xmlstarlet texinfo chrpath gcc-aarch64-linux-gnu libarchive-d…

Android音視頻探索之旅 | C++層使用OpenGL ES實現視頻渲染

一.前言 在學習音視頻的過程中&#xff0c;實現視頻渲染是非常常見的&#xff0c;而渲染的方式也挺多&#xff0c;可以使用Java層的OpenGL ES進行圖形渲染&#xff0c;也可以使用Ffmpeg來顯示&#xff0c;還有就是通過C層的OpenGL ES來進行渲染。OpenGL ES是OpenGL三維圖形API…

公鏈的主要特征有哪些?

公鏈&#xff08;公共區塊鏈&#xff09;是指對所有人開放、無需授權即可參與的區塊鏈&#xff0c;其主要特征包括&#xff1a;- 開放性&#xff1a;任何人都可以自由加入網絡&#xff0c;參與節點運行、數據驗證或交易&#xff0c;無需經過中心化機構的審核。- 去中心化&#…

博途多重背景、參數實例--(二)

引用官方技術支持&#xff1a; 《《 博圖&#xff0c;怎么把DINT類型轉換成TIME&#xff0c;就是MCGS觸摸屏上設置時間&#xff0c;PLC里的定時器TIME 》》 我們把上面的實現&#xff0c;封裝成FC,FB塊&#xff08;FB程序內調用定時器指令時的選項不…

單片機基礎

什么是嵌入式系統&#xff1f; 嵌入式系統通常指的是專門為某種功能設計的微型計算機系統&#xff0c;比如智能手表、家電控制板、汽車ECU等。 什么是嵌入式系統的IO&#xff1f; IO&#xff08;Input/Output&#xff0c;輸入/輸出&#xff09;就是嵌入式系統與外部世界“交…

全連接神經網絡(MLP)原理與PyTorch實現詳解

一、全連接神經網絡概述全連接神經網絡(Fully Connected Neural Network)&#xff0c;也稱為多層感知機(Multi-Layer Perceptron, MLP)&#xff0c;是深度學習中最基礎的神經網絡結構之一。它由多個全連接層組成&#xff0c;每一層的神經元與下一層的所有神經元相連接。1.1 神經…

推薦系統-數據分割、性能驗證

推薦系統基礎概念前言 作者根據開源項目 gorse 的每一步提交&#xff0c; 系統性學習推薦系統架構組成以及gorse中使用的推薦算法的實現。 通過參考算法文檔以及代碼實現&#xff0c;作者對gorse的學習過程以及進度 與 博客發布的時間線保持一致數據集分割原因 推薦系統的根本任…

從電商新手到單日變現5000+,我是如何做到閑魚爆單的

很多人想做項目賺錢&#xff0c;卻總是邁不出第一步。今天給大家分享一個可以從電商小白到成功跑通項目&#xff0c;實現單日GMV 5000的項目。今天將分享從選品、內容制作、銷售服務的全過程實戰經驗。1&#xff1a;閑魚實戰&#xff0c;強執行力01實操前的準備執行力就是你的動…

vue3實現pdf文件預覽 - vue-pdf-embed

參考地址&#xff1a;https://juejin.cn/post/7105933034771185701 這個參考文章的代碼直接可以復制使用&#xff0c;樣式也是給到的&#xff0c;但是實現的是一頁一頁的顯示pdf內容&#xff0c;我的需求是要全部展示出來&#xff0c;頁碼切換時是做一個滾動定位操作。 思路&am…

【AI論文】OmniPart:基于語義解耦與結構連貫性的部件感知三維生成

摘要&#xff1a;創建具有顯式、可編輯部件結構的三維資產&#xff0c;對于推動交互式應用的發展至關重要。然而&#xff0c;大多數生成方法僅能生成整體式形狀&#xff0c;限制了其實際應用價值。我們提出OmniPart——一種新型的部件感知三維物體生成框架&#xff0c;旨在實現…

Pandas-數據查看與質量檢查

Pandas-數據查看與質量檢查一、數據查看&#xff1a;快速掌握數據概況1. 整體概覽&#xff1a;shape與info()2. 數值特征預覽&#xff1a;describe()3. 隨機抽樣&#xff1a;head()與sample()二、數據質量檢查&#xff1a;識別與處理問題1. 缺失值檢查與處理處理策略&#xff1…

類和對象拓展——日期類

一.前言通過前面對類和對象的學習&#xff0c;現在我們可以開始實踐日期類的代碼編寫。在實際操作過程中&#xff0c;我會補充之前文章中未提及的相關知識點。二.正文 1. 日期類代碼實現我們先來看看要實現什么功能吧&#xff0c;把他放在Date.h中#pragma once #include<ios…

大模型KV緩存量化誤差補償機制:提升推理效率的關鍵技術

大模型KV緩存量化誤差補償機制&#xff1a;提升推理效率的關鍵技術摘要 隨著大型語言模型&#xff08;LLM&#xff09;參數規模突破千億級別&#xff0c;推理過程中的顯存占用與計算延遲成為制約其實際部署的核心瓶頸。KV緩存&#xff08;Key-Value Cache&#xff09;作為Trans…