Java中stream.map和stream.forEach的區別
網上很多關於講解這倆個區別的文章,但大多數要麼不明不白,要麼太復雜難理解。所以自己通俗的講一下,畢竟不會太深奧,隻是個人理解 (評論區指出瞭錯誤改瞭一下)。
什麼是 stream 流
我們在使用集合或數組對元素進行操作時往往會遇到這種情況:通過對不同類型的存儲元素,按照特定條件進行查找、排序、等操作時往往會寫一大段代碼,而且更要命的是,不同類型的數據,操作的方法也不一樣,比如一個存儲 Student 實體類和一個隻存儲 String 類型的集合倆者的操作步驟肯定大不一樣且無法通用,而 stream API 就解決瞭這些問題,對數據操作時進行瞭統一的處理。
可以這樣理解,stream API 把集合或數組裡面的數據轉換成統一格式,在通過指定的方法,對裡面的元素進行操作,之後將操作過後的的數據按照流的格式返回。這樣做的好處就是我們不必再關心我們操作的數據是什麼類型,隻需要統一轉換成 stearm 流進行統一操作,大大簡化瞭我們開發時的過程。
stream.map 和 stream.forEach 的區別
我們先看這倆個方法的定義👇
void forEach(Consumer<? super T> action); <R> Stream<R> map(Function<? super T, ? extends R> mapper);
即使看不懂這倆個方法定義,但你也肯定能知道 forEach 返回的 void, 而 map 返回的 Stream 類型,接下來再看這個例子👇
// 定義一個 Integer 類型的集合 List<Integer> numbers = Arrays.asList( 2, 3, 7, 5); // 獲取對應的平方數 numbers.stream().map(x-> x*x).forEach(System.out::println); //結果: 4 9 49 25
由此可以得到結論: map 是將 number 中的每個元素進行取值之後進行操作,再將操作過後的每個結果返回到 number 中去,而 forEach 是一種遍歷循環,通過遍歷循環執行必要的操作,並不會把值直接返回到 number
到此這篇關於Java中stream.map和stream.forEach的區別的文章就介紹到這瞭,更多相關Java stream.map和stream.forEach內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- 一篇文章帶你瞭解Java Stream流
- java中lambda(函數式編程)一行解決foreach循環問題
- 手把手帶你瞭解Java-Stream流方法學習及總結
- 詳解Java8的forEach(…)如何提供index值
- Java8新特性:函數式編程