Stream流中間方法的使用

Stream流的中間方法詳解

Stream流的中間方法指那些返回新Stream的操作,允許鏈式調用。這些方法通常用于數據過濾、映射、排序等操作,不會觸發最終計算。

filter方法

filter用于篩選滿足條件的元素,接受一個Predicate函數式接口參數。

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> evenNumbers = numbers.stream().filter(n -> n % 2 == 0).collect(Collectors.toList()); 
// 輸出: [2,4]

map方法

map用于元素轉換,接受Function接口參數,將元素映射為另一種形式。

List<String> names = Arrays.asList("Alice", "Bob");
List<Integer> nameLengths = names.stream().map(String::length).collect(Collectors.toList());
// 輸出: [5,3]

flatMap方法

flatMap用于將嵌套結構扁平化,每個元素轉換為新的Stream后合并。

List<List<Integer>> nestedNumbers = Arrays.asList(Arrays.asList(1,2),Arrays.asList(3,4));
List<Integer> flattened = nestedNumbers.stream().flatMap(List::stream).collect(Collectors.toList());
// 輸出: [1,2,3,4]

distinct方法

distinct去除重復元素,依賴元素的equals方法。

List<Integer> duplicates = Arrays.asList(1,2,2,3);
List<Integer> unique = duplicates.stream().distinct().collect(Collectors.toList());
// 輸出: [1,2,3]

sorted方法

sorted用于排序,可自然排序或提供Comparator。

List<String> unsorted = Arrays.asList("Bob", "Alice");
List<String> sorted = unsorted.stream().sorted().collect(Collectors.toList());
// 輸出: ["Alice","Bob"]List<Integer> numbers = Arrays.asList(3,1,2);
List<Integer> customSorted = numbers.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());
// 輸出: [3,2,1]

limit方法

limit截取前N個元素。

List<Integer> numbers = Arrays.asList(1,2,3,4,5);
List<Integer> firstThree = numbers.stream().limit(3).collect(Collectors.toList());
// 輸出: [1,2,3]

skip方法

skip跳過前N個元素。

List<Integer> numbers = Arrays.asList(1,2,3,4,5);
List<Integer> afterTwo = numbers.stream().skip(2).collect(Collectors.toList());
// 輸出: [3,4,5]

peek方法

peek用于調試,允許查看流經的元素但不修改。

List<String> names = Arrays.asList("Alice", "Bob");
List<String> result = names.stream().peek(System.out::println).map(String::toUpperCase).collect(Collectors.toList());
// 輸出調試信息: Alice Bob
// 最終結果: ["ALICE","BOB"]
實例一:
public class StreamDemo6 {public static void main(String[] args) {/*filter              過濾limit               獲取前幾個元素skip                跳過前幾個元素注意1:中間方法,返回新的Stream流,原來的Stream流只能使用一次,建議使用鏈式編程注意2:修改Stream流中的數據,不會影響原來集合或者數組中的數據*/ArrayList<String> list = new ArrayList<>();Collections.addAll(list, "張無忌", "周芷若", "趙敏", "張強", "張三豐", "張翠山", "張良", "王二麻子", "謝廣坤");//filter   過濾  把張開頭的留下,其余數據過濾不要/*list.stream().filter(new Predicate<String>() {@Overridepublic boolean test(String s) {//如果返回值為true,表示當前數據留下//如果返回值為false,表示當前數據舍棄不要return s.startsWith("張");}}).forEach(s -> System.out.println(s));list.stream().filter(s -> s.startsWith("張")).filter(s -> s.length() == 3).forEach(s -> System.out.println(s));System.out.println("====================================");System.out.println(list);*//* limit               獲取前幾個元素skip                跳過前幾個元素*///"張無忌", "周芷若", "趙敏", "張強", "張三豐", "張翠山", "張良", "王二麻子", "謝廣坤"//list.stream().limit(3).forEach(s -> System.out.println(s));//list.stream().skip(4) .forEach(s -> System.out.println(s));//課堂練習://"張強", "張三豐", "張翠山"//第一種思路://先獲取前面6個元素:"張無忌", "周芷若", "趙敏", "張強", "張三豐", "張翠山",//然后跳過前面3個元素//list.stream().limit(6).skip(3).forEach(s -> System.out.println(s));//第二種思路://先跳過3個元素:"張強", "張三豐", "張翠山", "張良", "王二麻子", "謝廣坤"//然后再獲取前面3個元素:"張強", "張三豐", "張翠山"//list.stream().skip(3).limit(3).forEach(s -> System.out.println(s));}
}
實例二:
public class StreamDemo7 {public static void main(String[] args) {/*distinct            元素去重,依賴(hashCode和equals方法)concat              合并a和b兩個流為一個流注意1:中間方法,返回新的Stream流,原來的Stream流只能使用一次,建議使用鏈式編程注意2:修改Stream流中的數據,不會影響原來集合或者數組中的數據*/ArrayList<String> list1 = new ArrayList<>();Collections.addAll(list1, "張無忌","張無忌","張無忌", "張強", "張三豐", "張翠山", "張良", "王二麻子", "謝廣坤");ArrayList<String> list2 = new ArrayList<>();Collections.addAll(list2, "周芷若", "趙敏");// distinct            元素去重,依賴(hashCode和equals方法)//list1.stream().distinct().forEach(s -> System.out.println(s));Stream.concat(list1.stream(),list2.stream()).forEach(s -> System.out.println(s));}
}
實例三:
public class StreamDemo8 {public static void main(String[] args) {/*map                 轉換流中的數據類型注意1:中間方法,返回新的Stream流,原來的Stream流只能使用一次,建議使用鏈式編程注意2:修改Stream流中的數據,不會影響原來集合或者數組中的數據*/ArrayList<String> list = new ArrayList<>();Collections.addAll(list, "張無忌-15", "周芷若-14", "趙敏-13", "張強-20", "張三豐-100", "張翠山-40", "張良-35", "王二麻子-37", "謝廣坤-41");//需求:只獲取里面的年齡并進行打印//String->int//第一個類型:流中原本的數據類型//第二個類型:要轉成之后的類型//apply的形參s:依次表示流里面的每一個數據//返回值:表示轉換之后的數據//當map方法執行完畢之后,流上的數據就變成了整數//所以在下面forEach當中,s依次表示流里面的每一個數據,這個數據現在就是整數了list.stream().map(new Function<String, Integer>() {@Overridepublic Integer apply(String s) {String[] arr = s.split("-");String ageString = arr[1];int age = Integer.parseInt(ageString);return age;}}).forEach(s-> System.out.println(s));System.out.println("------------------------");list.stream().map(s-> Integer.parseInt(s.split("-")[1])).forEach(s-> System.out.println(s));}
}

注意:中間操作具有延遲特性,只有遇到終端操作時才會執行。多個中間操作可以組合形成處理流水線。

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

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

相關文章

華為云Flexus+DeepSeek征文|華為云ModelArts結合FeedMe:開啟AI驅動的RSS閱讀新時代

華為云FlexusDeepSeek征文&#xff5c;華為云ModelArts結合FeedMe&#xff1a;開啟AI驅動的RSS閱讀新時代 前言一、華為云ModelArts Studio平臺介紹1.1 ModelArts Studio介紹1.2 ModelArts Studio主要特點1.3 ModelArts Studio使用場景1.4 ModelArts Studio產品架構 二、FeedMe…

華為云Flexus+DeepSeek征文 | 華為云ModelArts Studio新手入門:DeepSeek服務的配置與使用詳解

華為云FlexusDeepSeek征文 | 華為云ModelArts Studio新手入門&#xff1a;DeepSeek服務的配置與使用詳解 前言一、ModelArts Studio介紹1. 華為云ModelArts Studio簡介2. 華為云ModelArts Studio主要特點3. 華為云ModelArts Studio主要使用場景 二、ModelArts Studio平臺開通De…

Note2:機器學習基本攻略(Machine Learning by Hung-yi Lee)

目錄 基本思路 1.訓練資料上loss很大 1.1 model bias 1.2 optimazation&#xff08;優化不夠好&#xff09; 1.3如何確定是 model bias還是optimazation 解決方法 2.訓練資料上loss很小 2.1 Overfitting 解決方案 1.使用更多訓練資料 2.限制模型 2.2 Mismatch 3.…

使用ubuntu下的FAST和gfzrnx進行廣播星歷下載及版本之間的轉換

使用FAST下載混合的廣播星歷文件 cd FAST_V3.00.03 (進入文件夾) chmod x FAST (授權) chmod x bin/* ./FAST1 下載&#xff1a;https://gnss.gfz.de/services/gfzrnx/download &#xff08;需注冊&#xff09; 2 打開bash&#xff0c;依次輸入 (其中gfzrnx_2.1.12_lx64為下載…

vue裁剪圖片

有一個需求就是在你有倆張圖片一樣大小&#xff0c;一個亮色的&#xff0c;一個暗色的&#xff0c;亮色的根據后端返回的數據顯示多高&#xff0c;這樣就有一個感覺是慢慢往上走的&#xff0c;主要用到了css的一個屬性 .my-info-image {width: 280px;height: 200px;position: a…

使用GDAL庫統計不同分區內的災害點分布情況,計算災害相對密度等統計指標

主要功能是處理地理空間柵格數據&#xff08;TIFF文件&#xff09;和災害點數據&#xff08;CSV文件&#xff09;&#xff0c;統計不同分區內的災害點分布情況&#xff0c;并計算災害相對密度等統計指標。 TIFF文件&#xff1a;已經重分類后的文件 CSV文件&#xff1a;災害點…

jar 包如何下載

在 Javaweb - 2 中&#xff0c;我們導入了三那個 jar 包來進行服務端的 JSON 串格式轉換&#xff0c;這個為大家做一個如何下載那三個 jar 包的教程~ 打開倉庫網站 我們需要先打開一個倉庫網址&#xff1a;Maven Repository: Search/Browse/Explore 這個網址中&#xff0c;幾…

【vue3】打包配置webpack壓縮,哈希值設置

壓縮配置 依賴下載&#xff1a; npm i --save-dev compression-webpack-plugin vue.config.js配置 const CompressionWebpackPlugin require(compression-webpack-plugin);filenameHashing: true, // 打包后為文件名增加hash值// 配置webpackconfigureWebpack: config >…

vue3 + elementPlus 封裝hook,檢測form表單數據修改變更;示例用 script setup 語法使用

vue3 elementPlus 封裝hook,檢測form表單數據修改變更&#xff1b;示例 script setup 語法 原文&#xff1a;https://mp.weixin.qq.com/s/gCuqKskp-KBxdClxcpwFqw原文&#xff1a;https://mp.weixin.qq.com/s/gCuqKskp-KBxdClxcpwFqw原文&#xff1a;https://mp.weixin.qq.com…

Java-泛型類

一、泛型類的基本概念 1. 什么是泛型類 泛型類是指使用類型參數定義的類&#xff0c;可以在類定義時不指定具體類型&#xff0c;而在實例化時指定。 2. 泛型類的作用 類型安全&#xff1a;編譯時檢查類型匹配 消除強制轉換&#xff1a;減少運行時ClassCastException風險 代…

信任邊界的人生智慧

我曾經是個喜歡試探的人 總想知道朋友會不會在我困難時伸手&#xff0c;合作伙伴會不會在利益面前變臉&#xff0c;愛人會不會在誘惑下堅守 結果發現&#xff0c;每一次試探都像是在關系上撒鹽 不是因為對方經不起考驗&#xff0c;而是「考驗」這個行為本身就充滿了不信任的…

SQL Server 中 GO 的作用

CREATE DATABASE MyDatabase; USE MyDatabase; GO --定義局部變量 DECLARE s_no varchar(8), s_avgrade numeric(4,1); --對局部變量賦值 SET s_no 20170208; SET s_avgrade 95.0; --使用局部變量 UPDATE student SET s_avgrade s_avgrade WHERE s_no s_no;&#x1f31f; G…

指標中臺+大模型:解密衡石Agentic BI的NL2DSL架構實現

——Text2Metrics引擎如何攻克語義鴻溝&#xff0c;碾壓傳統NL2SQL方案 一、傳統NL2SQL的“架構原罪”&#xff1a;業務語義的失控黑洞 當某銀行嘗試用NL2SQL分析“高凈值客戶流失率”時&#xff0c;系統生成如下危險SQL&#xff1a; 這正是NL2SQL的三大架構缺陷&#xff1a;…

設計模式 - 抽象工廠

抽象工廠是對工廠的抽象化&#xff0c;而不只是制造方法。 為了滿足不同用戶對產品的多樣化需求&#xff0c;工廠不會只局限于生產一類產品&#xff0c;但是系統如果按工廠方法那樣為每種產品都增加一個工廠又會造成工廠泛濫。所以&#xff0c;為了調和這種矛盾&#xff0c;抽…

面向對象Plus(2/2)

目錄 面向對象Plus(qianwen) 一.面向對象三大特性 封裝 繼承 多態 二.多態 1.了解多態 2.體驗多態 三.類屬性和實例屬性 1.類屬性 a.設置和訪問類屬性 類屬性的優點 b.修改類屬性 四.類方法和靜態方法 1.類方法 a.類方法特點 b.類方法應用場景 2.靜態方法 a…

MocapApi 中文文檔 和github下載地址 NeuronDataReader(以下簡稱 NDR)的下一代編程接口

以下是 MocapApi 技術文檔 github https://github.com/pnmocap/MocapApi?tabreadme-ov-file 國內可以查找getcode 英文文檔 https://mocap-api.noitom.com/mocap_api_en.html 概述 MocapApi 是 NeuronDataReader&#xff08;以下簡稱 NDR&#xff09;的下一代編程接口&…

STM32歷史、命名、Flash、工作頻率

目錄 命名: Flash: 工作頻率&#xff1a; 復位&#xff1a; 低功耗模式&#xff1a; IO端口&#xff1a; JATG: 看門狗定時器&#xff1a; STM是一家半導體公式&#xff0c;專門做芯片的&#xff0c;STM32是指32位的微處理器&#xff0c;其中芯片的架構是ARM結構的&#…

了解公共部門中的數據網格:支柱、架構和示例

作者&#xff1a;來自 Elastic Elastic Platform Team 想想那些像公共健康記錄、城市規劃模型等項目背后的所有數據。政府機構一直在產生大量數據。當數據分散在云平臺、本地系統或像衛星和應急響應中心這樣的專業環境中時&#xff0c;情況變得更加復雜。找到信息變得困難&…

阿里云ACP-檢索分析服務

當數據量爆炸增長&#xff0c;并且需要提供全文檢索功能&#xff0c;需要有效的數據檢索能力 用什么數據庫怎么保證安全性如何解決統計分析問題如何解決單點故障如何解決檢索難題 應對方案&#xff1a; 關系型數據庫&#xff1a;主從備份解決數據安全性問題&#xff0c;數據…

【DBeaver】跨平臺數據庫連接工具DBeaver Community 23.2.5安裝配置使用

DBeaver是一款免費開源的通用數據庫管理工具和SQL客戶端&#xff0c;支持多種數據庫系統。它基于Java開發&#xff0c;具備跨平臺能力&#xff0c;可以在Windows、macOS和Linux系統上運行。 目錄 安裝DBeaver 連接MySQL數據庫 安裝DBeaver 進入DBeaver官網 DBeaver Communit…