Java - Stream流式編程

Stream流式操作

Stream流式操作,就是學習java.util.stream包下的APIStream不同于java的輸入輸出流,是實現對集合(Collection)的復雜操作,例如查找、替換、過濾和映射數據等,集合是一種靜態的數據結構,存儲在內存中,而Stream是用于計算的,通過CPU實現計算,因此可以認為Stream就是處理集合數據的各種算法流程。

Stream流式操作流程

Stream流式操作主要有 3 個步驟:

1、創建Stream對象:通過一些數據源創建流對象

2、中間操作:對數據源的數據進行處理(過濾、排序等)

3、終止操作:一旦執行終止操作, 就執行中間的鏈式操作,并產生結果

Stream的獲取

1.針對集合:Collection中的方法Stream<E> stream()  2.針對數組:Stream接口中的靜態方法:static <T> Stream<T> of(T... values)  

Stream的操作

準備需要操作的集合

// 由數字組成的集合
List<Integer> numberList = Arrays.asList(3, 1, 4, 1, 5, 9, 2, 6, 5);// Student類:自增的主鍵id,name由uuid生成,且首位是數字
List<Student> selectList = studentMapper.selectList(new LambdaQueryWrapper<>());

Stream的中間操作

// filter:過濾
// 截取首位數字,輸出取余為0的對象
List<Student> list1 = selectList.stream().filter(student -> {int i = Integer.parseInt(student.getName().substring(0, 1));return 0 == (i % 2);
}).collect(Collectors.toList());
// map:將流中的每個元素映射為另一個元素,生成一個新的流
// 輸出每個Student
List<Integer> list2 = selectList.stream().map(student -> student.getName().length()).collect(Collectors.toList());
// sorted:對流中的元素進行排序,默認是自然順序排序,也可以傳入Comparator進行自定義排序
// 集合中是一個對象
// 根據id正序
List<Student> list3 = selectList.stream().sorted(Comparator.comparing(Student::getId)).collect(Collectors.toList());
// 根據id倒敘
List<Student> list4 = selectList.stream().sorted(Comparator.comparing(Student::getId).reversed()).collect(Collectors.toList());
// 集合中是數字
List<Integer> list5 = numberList.stream().sorted((o1, o2) -> {if (o1.compareTo(o2) > 0) {return -1;} else {return 1;}
}).collect(Collectors.toList());
// distinct:去重
List<Integer> list6 = numberList.stream().distinct().collect(Collectors.toList());
// limit:截取前幾個元素
List<Integer> list7 = numberList.stream().limit(3).collect(Collectors.toList());
// skip:越過前幾個元素
List<Integer> list8 = numberList.stream().skip(3).collect(Collectors.toList());

Stream的終止操作

// forEach:遍歷操作,沒有返回值,在accept方法中編寫集合處理邏輯即可
selectList.forEach(new Consumer<Student>() {@Overridepublic void accept(Student student) {System.err.println(student.getId()+" -- "+student.getName())}
});
// 可簡化為
selectList.forEach(student -> System.err.println(student.getId()+" -- "+student.getName()));
// collect:將流中的元素收集到一個集合中。可以通過Collectors工具類提供的方法來實現不同類型的收集操作。
// 例如:從查詢到的所有學生中,過濾id>10的,然后將過濾出來的所有學生放進一個新的集合中
List<Student> studentList = selectList.stream().filter(student -> student.getId() > 10).collect(Collectors.toList());
// reduce:對流中的元素求和
int sum = numberList.stream().reduce(0, Integer::sum);
// count:統計個數
long count = numberList.stream().count();
// anyMatch:判斷流中是否存在任意一個元素滿足給定條件。
boolean anyMatch = numberList.stream().anyMatch(integer -> integer % 2 == 0);
// anyMatch:判斷流中的所有元素是否都滿足給定條件。
boolean allMatch = numberList.stream().allMatch(integer -> integer % 2 == 0);

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

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

相關文章

LeetCode547省份數量

題目描述 有 n 個城市&#xff0c;其中一些彼此相連&#xff0c;另一些沒有相連。如果城市 a 與城市 b 直接相連&#xff0c;且城市 b 與城市 c 直接相連&#xff0c;那么城市 a 與城市 c 間接相連。省份 是一組直接或間接相連的城市&#xff0c;組內不含其他沒有相連的城市。給…

第十一章 文件及IO操作

第十一章 文件及IO操作 文件的概述及基本操作步驟 文件&#xff1a; 存儲在計算機的存儲設備中的一組數據序列就是文件不同類型的文件通過后綴名進行區分 文本文件&#xff1a;由于編碼格式的不同&#xff0c;所占磁盤空間的字節數不同(例如GBK編碼格式中一個中文字符占2字…

cesium繪制三角網可視化及mesh網格數據解析

可視化運行效果(水質污染擴散) 實現運行效果 術語 Mesh網格數據解析 Mesh&#xff08;網格&#xff09;在不同領域有不同的應用和定義。在計算機網絡中&#xff0c;Mesh網絡指的是一種無中心的網狀結構&#xff0c;每個節點都與其他節點相連。而在3D計算機圖形學中&#…

云原生Kubernetes: K8S 1.26版本 部署KubeSphere

目錄 一、實驗 1.環境 2.K8S 1.26版本部署HELM 3.K8S 1.26版本 部署KubeSphere 4.安裝KubeSphere DevOps 二、問題 1.如何安裝Zadig 2.擴展插件Zadig安裝失敗 3.calico 如何實現不同node通信 4.如何清除docker占用的磁盤空間 5.如何強制刪除資源 6.namespace刪除不…

CGAL 點云生成高程模型數據(DSM)

點云生成高程模型 一、什么是DSM?二、C++代碼三、結果可視化一、什么是DSM? DSM(Digital Surface Model)是一種數字高程模型,通常用于描述地表地形的數字化表示。它是由一系列離散的高程數據點組成的三維地形模型,其中每個點都具有其相應的高程值。 ??DSM主要用于獲取和…

宿舍管理系統--畢業設計

畢業設計&#x1f4bc;MD5加密&#x1f512;SSM框架&#x1f3a8;Layui框架&#x1f384; 實現功能 管理員的登錄與登出 管理員,班級,學生,宿舍&#xff0c;衛生&#xff0c;訪客各模塊增刪改查 個別模塊關聯查詢 各個模塊數據導出Excel 一些截圖

[4]CUDA中的向量計算與并行通信模式

CUDA中的向量計算與并行通信模式 本節開始&#xff0c;我們將利用GPU的并行能力&#xff0c;對其執行向量和數組操作討論每個通信模式&#xff0c;將幫助你識別通信模式相關的應用程序&#xff0c;以及如何編寫代碼 1.兩個向量加法程序 先寫一個通過cpu實現向量加法的程序如…

軟件設計:基于 python 代碼快速生成 UML 圖

1. 官方文檔 PlantUML Language Reference Guide Comate | 百度研發編碼助手 百度 Comate (Coding Mate Powered by AI) 是基于文心大模型的智能代碼助手&#xff0c;結合百度積累多年的編程現場大數據和外部優秀開源數據&#xff0c;可以生成更符合實際研發場景的優質代碼。…

自動化測試里的數據驅動和關鍵字驅動思路的理解

&#x1f345; 視頻學習&#xff1a;文末有免費的配套視頻可觀看 &#x1f345; 點擊文末小卡片&#xff0c;免費獲取軟件測試全套資料&#xff0c;資料在手&#xff0c;漲薪更快 初次接觸自動化測試時&#xff0c;對數據驅動和關鍵字驅動不甚理解&#xff0c;覺得有點故弄玄須…

GBDT、XGBoost、LightGBM算法詳解

文章目錄 一、GBDT (Gradient Boosting Decision Tree) 梯度提升決策樹1.1 回歸樹1.2 梯度提升樹1.3 Shrinkage1.4 調參1.5 GBDT的適用范圍1.6 優缺點 二、XGBoost (eXtreme Gradient Boosting)2.1 損失函數2.2 正則項2.3 打分函數計算2.4 分裂節點2.5 算法過程2.6 參數詳解2.7…

oracle中insert all的用法

1、簡述 使用insert into語句進行表數據行的插入&#xff0c;但是oracle中有一個更好的實現方式&#xff1a;使用insert all語句。 insert all語句是oracle中用于批量寫數據的 。insert all分又為 無判斷條件插入有判斷條件插入有判斷條件插入分為 Insert all when... 子句 …

利用 MongoDB Atlas 進行大模型語義搜索和RAG

節前&#xff0c;我們星球組織了一場算法崗技術&面試討論會&#xff0c;邀請了一些互聯網大廠朋友、參加社招和校招面試的同學. 針對算法崗技術趨勢、大模型落地項目經驗分享、新手如何入門算法崗、該如何準備、面試常考點分享等熱門話題進行了深入的討論。 匯總合集&…

基于英飛凌BGT60LTR11AIP E6327芯片具低功耗的脈沖多普勒操作模式常用于汽車應用的雷達上

芯片特征&#xff1a; 60 GHz收發器MMIC&#xff0c;帶一個發射器和一個接收器單元封裝天線&#xff08;AIP&#xff09;&#xff08;6.73.30.56 mm3)低功耗的脈沖多普勒操作模式自主模式用于運動和運動方向的集成檢測器運動檢測信號的直接輸出目標檢測范圍的15個可配置閾值檢測…

Android14之Binder調試(二百一十一)

簡介&#xff1a; CSDN博客專家&#xff0c;專注Android/Linux系統&#xff0c;分享多mic語音方案、音視頻、編解碼等技術&#xff0c;與大家一起成長&#xff01; 優質專欄&#xff1a;Audio工程師進階系列【原創干貨持續更新中……】&#x1f680; 優質專欄&#xff1a;多媒…

前端面試題日常練-day21 【面試題】

題目 希望這些選擇題能夠幫助您進行前端面試的準備&#xff0c;答案在文末。 AJAX 是什么的縮寫&#xff1f; a) Asynchronous JavaScript and XMLb) Asynchronous JavaScript and XHTMLc) Asynchronous Java and XMLd) Asynchronous Java and XHTML使用 AJAX 可以實現以下哪…

2024年5月20日優雅草蜻蜓API大數據服務中心v2.0.4更新

v2.0.4更新 v2.0.4更新 2024年5月20日優雅草蜻蜓API大數據服務中心v2.0.4更新-增加ai繪畫接口增加淘寶聯想詞接口底部增加聯系方式 更新日志 底部增加聯系方式 增加ai繪畫接口 增加淘寶聯想詞接口 增加用戶中心充值提示 用戶中心內頁顏色改版完成 截圖 部分具體更新接口信…

神經網絡優化器-從SGD到AdamW

優化器準則 凸優化基本概念 先定義凸集&#xff0c;集合中的兩個點連接的線還在集合里面&#xff0c;就是凸集&#xff0c;用數學語言來表示就是&#xff1a;對于集合中的任意兩個元素x&#xff0c;y以及任意實數 λ ∈ ( 0 , 1 ) \lambda \in (0,1) λ∈(0,1)&#xff0c;有…

【NLP】詞性標注

詞 詞是自然語言處理的基本單位&#xff0c;自動詞法分析就是利用計算機對詞的形態進行分析&#xff0c;判斷詞的結構和類別。 詞性&#xff08;Part of Speech&#xff09;是詞匯最重要的特性&#xff0c;鏈接詞匯和句法 詞的分類 屈折語&#xff1a;形態分析 分析語&#…

k8s 1.24.x之后如果rest 訪問apiserver

1.由于 在 1.24 &#xff08;還是 1.20 不清楚了&#xff09;之后&#xff0c;下面這兩個apiserver的配置已經被棄用 了&#xff0c;簡單的說就是想不安全的訪問k8s是不可能了&#xff0c;所以只能走安全的訪問方式也就是 https://xx:6443了&#xff0c;所以需要證書。 - --ins…

Git系列:git rm 的高級使用技巧

&#x1f49d;&#x1f49d;&#x1f49d;歡迎蒞臨我的博客&#xff0c;很高興能夠在這里和您見面&#xff01;希望您在這里可以感受到一份輕松愉快的氛圍&#xff0c;不僅可以獲得有趣的內容和知識&#xff0c;也可以暢所欲言、分享您的想法和見解。 推薦:「stormsha的主頁」…