Stream流-Java

Stream流的作用:

結合了Lambda表達式,簡化集合,數組的操作

Stream流的使用步驟:

1. 先得到一條Stream流(流水線),并把數據放上去

獲取方式方法名說明
單列集合default Stream<E> stream()Collection中的默認方法
雙列集合無法直接使用stream流
數組public static <T> Stream<T> stream(T[] array)Arrays工具類中的靜態方法
一堆零散數據public static<T> Stream<T> of(T... values)Stream接口中的靜態方法
				//1.單列集合獲取Stream流ArrayList<String> list = new ArrayList<>();Collections.addAll(list,"a","b","c","d","e","f","g","h");//獲取到一條流水線,并把集合中的數據放到流水線上Stream<String> stream = list.stream();//使用終結方法打印一下流水線上的所有數據stream.forEach(new Consumer<String>() {@Overridepublic void accept(String s) {//s表示流水線上的每一個數據System.out.println(s);}});//forEach方法中的參數類型是Consumer<? super T> ,而這個參數類型點到源碼會發現他是//一個函數式接口,因此也就可以使用lambda表達式簡化上述代碼。list.stream().forEach(s -> System.out.println(s));
			  //雙列集合    無法直接使用stream流//1.創建雙列集合HashMap<String, Integer> hm = new HashMap<>();//2.添加數據hm.put("aaa",111);hm.put("bbb",222);hm.put("ccc",333);hm.put("ddd",444);//3.第一種獲取stream流hm.keySet().stream().forEach(s -> System.out.println(s));//4.第二種獲取stream流hm.entrySet().stream().forEach(s -> System.out.println(s));
//一堆零散數據    public static<T> Stream<T> of(T... values)    Stream接口中的靜態方法
Stream.of(1,2,3,4,5).forEach(s -> System.out.println(s));
Stream.of("a","b","c").forEach(s -> System.out.println(s));
注意:

Stream接口中靜態方法of的細節

方法的形參是一個可變參數,可以傳遞一堆零散的數據,也可以傳遞數組

但是數組必須是引用數據類型的,如果傳遞基本數據類型,是會把整個數組當作一個元素,存放到Stream當中。

2. 利用Stream流中的API進行各種操作

  1. 中間方法:方法調用完畢之后,還可以調用其他方法
Stream<T> filter (Predicate<?super T>predicate)過濾
Stream<T> limit (long maxSize)獲取前幾個元素
Stream<T> skip (long n)跳過前幾個元素
Stream<T> distinct()元素去重,依賴(hashCode和equals方法)
static<T>Stream<T> concat (Stream a,Streamb)合并a和b兩個流為一個流
Stream<R> map (Function<T,R> mapper)轉換流中的數據類型

注意一:中間方法,返回新的Stream流,原來的Stream流只能使用一次,建議使用鏈式編程。

注意二:修改Stream流中的數據,不會影響原來集合或者數組中的數據。

  1. 終結方法:最后一步,調用完之后,不能調用其他方法
名稱說明
void forEach(Consumer action)遍歷
long count()統計
toArray()收集流中的數據,放到數組中
collect(Collector collector)收集流中的數據,放到集合中(List(可以有重復元素) Set(沒有重復元素) Map)
				ArrayList<String> list = new ArrayList<>();Collections.addAll(list,"a","b","c");/*** IntFunction 的泛型:具體類型的數組* apply的形參:流中數據的個數,要跟數組的長度保持一致* apply的返回值:具體類型的數組* 方法體:就是創建數組** toArray方法的參數的作用:負責創建一個指定類型的數組* toArray方法的底層,會依次得到流里面的每一個數據,并把數據放到數組當中* toArray方法的返回值:是一個裝著流里面所有數據的數組**/String[] array = list.stream().toArray(new IntFunction<String[]>() {@Overridepublic String[] apply(int value) {return new String[value];}});System.out.println(Arrays.toString(array));String[] array1 = list.stream().toArray(value -> new String[value]);System.out.println(Arrays.toString(array1));
				ArrayList<String> list = new ArrayList<>();Collections.addAll(list,"a-男-11","b-男-34","c-男-24","d-男-22","e-女-13","f-女-51","g-女-15");Map<String, Integer> collect = list.stream().filter(s -> "男".equals(s.split("-")[1]))/*** toMap:參數一表示鍵的生成規則*        參數二表示值的生成規則** 參數一:*     Function泛型一:表示流中每一個數據的類型*         泛型二:表示Map集合中鍵的數據類型*     方法apply形參:依次表示流里面的每一個數據*         方法體:生成鍵的代碼*         返回值:已經生成的鍵** 參數二:*     Function泛型一:表示流中每一個數據的類型*         泛型二:表示Map集合中值的數據類型*     方法apply形參:依次表示流里面的每一個數據*         方法體:生成值的代碼*         返回值:已經生成的值*/.collect(Collectors.toMap(new Function<String, String>() {@Overridepublic String apply(String s) {return s.split("-")[0];}},new Function<String, Integer>() {@Overridepublic Integer apply(String s) {return Integer.parseInt(s.split("-")[2]);}}));System.out.println(collect);Map<String, Integer> collect1 = list.stream().filter(s -> "男".equals(s.split("-")[1])).collect(Collectors.toMap(s -> s.split("-")[0],s -> Integer.parseInt(s.split("-")[2])));System.out.println(collect1);

注意:

如果我們要收集到Map集合當中,鍵不能重復,否則會報錯。

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

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

相關文章

Leetcode 327. 區間和的個數

1.題目基本信息 1.1.題目描述 給你一個整數數組 nums 以及兩個整數 lower 和 upper 。求數組中&#xff0c;值位于范圍 [lower, upper] &#xff08;包含 lower 和 upper&#xff09;之內的 區間和的個數 。 區間和 S(i, j) 表示在 nums 中&#xff0c;位置從 i 到 j 的元素…

MinIO 版本管理實踐指南(附完整 Go 示例)

? 前言 在構建企業級對象存儲系統時,“對象的版本管理”是一個關鍵特性。MinIO 作為一款高性能、Kubernetes 原生的 S3 兼容對象存儲系統,也支持強大的版本控制功能。 本文將通過 Go 示例代碼 + 實操講解 的形式,手把手帶你掌握 MinIO 的版本控制能力,包括開啟版本控制、…

數組toString方法及類型檢測修復方案

在 JavaScript 中&#xff0c;數組的 toString() 方法被覆蓋&#xff08;重寫&#xff09;為返回數組元素的逗號分隔字符串&#xff0c;而不是原始的 [object Array] 類型標識。以下是詳細解釋和修復方案&#xff1a;問題原因Array.prototype.toString 被覆蓋數組繼承自 Object…

mysql索引底層B+樹

B樹勝出的關鍵特性&#xff1a;矮胖樹結構&#xff1a;3-4層高度即可存儲2000萬條記錄&#xff08;假設每頁存1000條&#xff09; 葉子鏈表&#xff1a;所有數據存儲在葉子節點&#xff0c;并通過雙向鏈表連接 非葉導航&#xff1a;非葉子節點僅存儲鍵值&#xff0c;不保存數據…

AI開放課堂:釘釘MCP開發實戰

我們正處在AI技術爆發的時代&#xff0c;也處于企業數字化蓬勃發展的時代。如何利用AI技術&#xff0c;突破模型自身知識的局限&#xff0c;安全、高效地與外部世界連接和交互&#xff0c;是當前所有AI開發者在企業數字化中面臨的問題之一。 MCP&#xff08;Model Context Prot…

DigitalOcean 一鍵模型部署,新增支持百度開源大模型ERNIE 4.5 21B

使用過DigitalOcean GPU Droplet 服務器的用戶應該對我們的一鍵模型部署功能不陌生。DigitalOcean 的一鍵模型部署 (1-Click Models) 功能是 DO 為開發者和企業提供的一種便捷方式&#xff0c;用于快速部署和運行預訓練的生成式 AI 模型&#xff0c;尤其是大型語言模型 (LLM)。…

【嵌入式面試】嵌入式筆試與面試寶典(offer必來)

&#x1f48c; 所屬專欄&#xff1a;【嵌入式面試】 &#x1f600; 作??者&#xff1a;蘭舟比特 &#x1f43e; &#x1f680; 個人簡介&#xff1a;熱愛開源系統與嵌入式技術&#xff0c;專注 Linux、網絡通信、編程技巧、面試總結與軟件工具分享&#xff0c;持續輸出實用干…

企業級數據分析創新實戰:基于表格交互與智能分析的雙引擎架構

引言&#xff1a;數字化轉型中數據協同困境與系統融合挑戰 在數字化轉型實踐中&#xff0c;企業普遍面臨數據系統與業務運營的協同困境&#xff0c;主要表現為數據處理平臺與核心業務流程的架構隔離、分析成果與決策閉環的價值斷層、以及雙重數據維護帶來的資源損耗。這種系統…

openbmc 日志系統繼續分析

1.說明 1.1 總體說明 本節是繼: https://blog.csdn.net/wit_yuan/article/details/147142407?spm=1011.2415.3001.5331 后的繼續分析的文檔。 該篇內容主要目的是分析整個openbmc的日志系統。 注意解讀文檔: https://github.com/openbmc/docs/blob/master/designs/event-l…

【JIRA小白如何使用它進行bug管理】

JIRA小白如何使用它進行bug管理 提示&#xff1a;入職一般來說&#xff0c;公司會提供賬號&#xff0c;不需要部署如何提bug&#xff1a; JIRA有兩種提交方式 在執行測試用例中在bug管理項目中新建提bug建議或者注意事項&#xff1a; 標題&#xff1a;執行完A之后&#xff0c;發…

陪診小程序系統開發:開啟醫療陪護新時代

在快節奏的現代生活中&#xff0c;人們面臨著各種各樣的壓力&#xff0c;健康問題也日益凸顯。當生病就醫時&#xff0c;尤其是對于老年人、孕婦、殘障人士等特殊群體&#xff0c;獨自前往醫院往往會遇到諸多困難&#xff0c;如不熟悉醫院流程、行動不便、心理上感到孤獨無助等…

Leetcode—1035. 不相交的線【中等】

2025每日刷題&#xff08;214&#xff09; Leetcode—1035. 不相交的線最長公共子序列長度&#xff08;Longest Common Subsequence&#xff0c;LCS&#xff09; 給定兩個序列&#xff08;如字符串或數組&#xff09;&#xff0c;最長公共子序列&#xff08;LCS&#xff09;是同…

使用 Conda 工具鏈創建 UV 本地虛擬環境全記錄——基于《Python 多版本與開發環境治理架構設計》

Python 多版本環境治理理念驅動的系統架構設計&#xff1a;三維治理、四級隔離、五項自治 原則-CSDN博客 Python 多版本與開發環境治理架構設計-CSDN博客 【終極實戰】Conda/Poetry/Virtualenv/Pipenv/Hatch 多工具協同 AnacondaPyCharm&#xff1a;構建 Python 全版本棧隔離…

一文通透mamba2「力證Transformer are SSM」:從SSM、半可分矩陣、SMA、SSD到mamba2

前言 實話說&#xff0c;過去一兩月一直忙著我司兩大類項目的推進 一類是正在逐一上線基于大模型的論文翻譯、論文審稿、論文對話、論文修訂/潤色、論文idea提煉等等(截止到24年8月底&#xff0c;其中的審稿和翻譯已上線七月官網 )一類是正在抓緊做面向一個個工廠的具身智能機…

【Java基礎06】ArrayList

文章目錄1.ArrayList1.1 集合的基本使用1.2 集合的創建和成員方法1.3 練習一&#xff1a;集合的遍歷基本數據類型對應的包裝類1.4 練習二&#xff1a;使用集合存儲并遍歷學生對象1.4 練習三&#xff1a;添加用戶對象并判斷是否存在寫方法要思考的步驟1.5 練習四&#xff1a;添加…

ddos 放在多個云主機,同時運行

1. 起因&#xff0c; 目的: 我打開 grok, 被 cloudflare 攔截&#xff0c;問我是不是機器人。 這個情況&#xff0c;如果是別的小網站也就算了&#xff0c;很正常。 大公司也搞這種東西&#xff0c;要么是偷懶&#xff0c;要么是太小氣了。 一氣之下&#xff0c;我決定寫個 ddo…

lspci/setpci用法小結

目錄 1.lspci用法小結 2.lspci -t 3.setpci用法小結 1.lspci用法小結 參考博客&#xff1a;【PCIe】lspci用法小結 - 知乎 lspci是一個用來顯示系統中所有PCI總線設備或者連接到該總線上所有設備的工具 man lspci lspci(8) …

光通信從入門到精通:PDH→DWDM→OTN 的超詳細演進筆記

光通信從入門到精通&#xff1a;PDH→DWDM→OTN 的超詳細演進筆記 作者&#xff1a; 脫脫克克 日期&#xff1a;2025-07-24 關鍵詞&#xff1a;DWDM、OTN、G.709、光纖、帶寬、C-band、L-band、DSP、ROADM 摘要 本文用一條“高速公路”的比喻&#xff0c;把 40 年光傳輸技術演進…

安全初級——網頁

網頁代碼<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>用戶登錄</title><script src&…

JVM原理及其機制(二)

目錄 一 . 垃圾回收機制&#xff08;GC&#xff09; 二 . 垃圾回收的具體步驟 &#xff08;1&#xff09;先找出誰是垃圾 方案一&#xff1a;引用計數 方案二&#xff1a;可達性分析 &#xff08;2&#xff09;釋放垃圾的內存空間 方案一&#xff1a;標記清除 方案二…