Java中Stream流中map和forEach的區(qū)別詳解
不是很難的知識(shí),但是今天犯錯(cuò)了,記錄一下
什么是 stream 流
我們在使用集合或數(shù)組對(duì)元素進(jìn)行操作時(shí)往往會(huì)遇到這種情況:通過對(duì)不同類型的存儲(chǔ)元素,按照特定條件進(jìn)行查找、排序、等操作時(shí)往往會(huì)寫一大段代碼,而且更要命的是,不同類型的數(shù)據(jù),操作的方法也不一樣,比如一個(gè)存儲(chǔ) Student 實(shí)體類和一個(gè)只存儲(chǔ) String 類型的集合倆者的操作步驟肯定大不一樣且無法通用,而 stream API 就解決了這些問題,對(duì)數(shù)據(jù)操作時(shí)進(jìn)行了統(tǒng)一的處理。
可以這樣理解,stream API 把集合或數(shù)組里面的數(shù)據(jù)轉(zhuǎn)換成統(tǒng)一格式,在通過指定的方法,對(duì)里面的元素進(jìn)行操作,之后將操作過后的的數(shù)據(jù)按照流的格式返回。這樣做的好處就是我們不必再關(guān)心我們操作的數(shù)據(jù)是什么類型,只需要統(tǒng)一轉(zhuǎn)換成 stearm 流進(jìn)行統(tǒng)一操作,大大簡化了我們開發(fā)時(shí)的過程。
Map
Map 方法接收一個(gè)功能型接口,功能型接口接收一個(gè)參數(shù)( Function<T, R> 接口),有返回值,返回的是一個(gè)新流,可以對(duì)這個(gè)流進(jìn)一步操作(即中間操作)

Map()是1對(duì)1的映射,只是起到映射作用,不會(huì)對(duì)原來的list中的元素做出任何改變。map方法調(diào)用完之后,如果需要得到一個(gè)list類型的結(jié)果,必須有.collect(Collectors.toList())

forEach
forEach 接收一個(gè) Consumer 接口,沒有返回值

forEach() 是遍歷list中的所有元素并做處理,會(huì)改變原來的list中的元素。
即使看不懂這倆個(gè)方法定義,但你也肯定能知道 forEach 返回的 void, 而 map 返回的 Stream 類型,接下來再看這個(gè)例子??
// 定義一個(gè) Integer 類型的集合 List<Integer> numbers = Arrays.asList( 2, 3, 7, 5); // 獲取對(duì)應(yīng)的平方數(shù) numbers.stream().map(x-> x*x).forEach(System.out::println); //結(jié)果: 4 9 49 25
由此可以得到結(jié)論: map 是將 number 中的每個(gè)元素進(jìn)行取值之后進(jìn)行操作,再將操作過后的每個(gè)結(jié)果返回到 number 中去,而 forEach 是單純的得到 number 集合中的值但并不能對(duì)其中里面的值進(jìn)行操作
使用場景
當(dāng)只是使用一下list中的元素的時(shí)候,用map;
當(dāng)需要改變list中的元素值的時(shí)候,用forEach
到此這篇關(guān)于Java中Stream流中map和forEach的區(qū)別詳解的文章就介紹到這了,更多相關(guān)Stream流中map和forEach內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java中Controller引起的Ambiguous?mapping問題及解決
這篇文章主要介紹了Java中Controller引起的Ambiguous?mapping問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10
Java?SpringMVC實(shí)現(xiàn)自定義攔截器
這篇文章主要為大家詳細(xì)介紹了SpringMVC實(shí)現(xiàn)自定義攔截器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-03-03
Spring內(nèi)存緩存Caffeine的基本使用教程分享
Caffeine作為當(dāng)下本地緩存的王者被大量的應(yīng)用再實(shí)際的項(xiàng)目中,可以有效的提高服務(wù)吞吐率、qps,降低rt,本文就來簡單介紹下Caffeine的使用姿勢吧2023-03-03
SpringBoot整合Shiro兩種方式(總結(jié))
這篇文章主要介紹了SpringBoot整合Shiro兩種方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06
tio-http-server打包為二進(jìn)制文件的實(shí)現(xiàn)及優(yōu)勢詳解
這篇文章主要為大家介紹了tio-http-server打包為二進(jìn)制文件實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12
springboot中@PostConstruct注解使用小結(jié)
本文主要介紹了springboot中@PostConstruct注解使用小結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-01-01
springboot vue完成發(fā)送接口請求顯示響應(yīng)頭信息
這篇文章主要為大家介紹了springboot+vue完成發(fā)送接口請求顯示響應(yīng)頭信息,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05

