Java中Stream流中map和forEach的區(qū)別詳解
不是很難的知識,但是今天犯錯了,記錄一下
什么是 stream 流
我們在使用集合或數(shù)組對元素進行操作時往往會遇到這種情況:通過對不同類型的存儲元素,按照特定條件進行查找、排序、等操作時往往會寫一大段代碼,而且更要命的是,不同類型的數(shù)據,操作的方法也不一樣,比如一個存儲 Student 實體類和一個只存儲 String 類型的集合倆者的操作步驟肯定大不一樣且無法通用,而 stream API 就解決了這些問題,對數(shù)據操作時進行了統(tǒng)一的處理。
可以這樣理解,stream API 把集合或數(shù)組里面的數(shù)據轉換成統(tǒng)一格式,在通過指定的方法,對里面的元素進行操作,之后將操作過后的的數(shù)據按照流的格式返回。這樣做的好處就是我們不必再關心我們操作的數(shù)據是什么類型,只需要統(tǒng)一轉換成 stearm 流進行統(tǒng)一操作,大大簡化了我們開發(fā)時的過程。
Map
Map 方法接收一個功能型接口,功能型接口接收一個參數(shù)( Function<T, R> 接口),有返回值,返回的是一個新流,可以對這個流進一步操作(即中間操作)
Map()是1對1的映射,只是起到映射作用,不會對原來的list中的元素做出任何改變。map方法調用完之后,如果需要得到一個list類型的結果,必須有.collect(Collectors.toList())
forEach
forEach 接收一個 Consumer 接口,沒有返回值
forEach() 是遍歷list中的所有元素并做處理,會改變原來的list中的元素。
即使看不懂這倆個方法定義,但你也肯定能知道 forEach 返回的 void, 而 map 返回的 Stream 類型,接下來再看這個例子??
// 定義一個 Integer 類型的集合 List<Integer> numbers = Arrays.asList( 2, 3, 7, 5); // 獲取對應的平方數(shù) numbers.stream().map(x-> x*x).forEach(System.out::println); //結果: 4 9 49 25
由此可以得到結論: map 是將 number 中的每個元素進行取值之后進行操作,再將操作過后的每個結果返回到 number 中去,而 forEach 是單純的得到 number 集合中的值但并不能對其中里面的值進行操作
使用場景
當只是使用一下list中的元素的時候,用map;
當需要改變list中的元素值的時候,用forEach
到此這篇關于Java中Stream流中map和forEach的區(qū)別詳解的文章就介紹到這了,更多相關Stream流中map和forEach內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
spring cloud gateway 全局過濾器的實現(xiàn)
全局過濾器作用于所有的路由,不需要單獨配置,我們可以用它來實現(xiàn)很多統(tǒng)一化處理的業(yè)務需求,這篇文章主要介紹了spring cloud gateway 全局過濾器的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-03-03spring boot 1.5.4 集成shiro+cas,實現(xiàn)單點登錄和權限控制
這篇文章主要介紹了spring boot 1.5.4 集成shiro+cas,實現(xiàn)單點登錄和權限控制,需要的朋友可以參考下2017-06-06