java中stream的peek()用法詳解
改變元素的內(nèi)部狀態(tài),對每個object執(zhí)行 saveInfomation(object, params),然后把結果收集到一個 List 里,這里涉及到了最終操作,需要的朋友可以參考下
前言
最近看到一段代碼:
aeFormList.stream().peek(object -> saveInfomation(object, params)).collect(Collectors.toList());
之前沒有用過peek,于是查了一下,peek的作用是:
改變元素的內(nèi)部狀態(tài)
從這句話中可以看出,上面代碼的意思是:對每個object執(zhí)行 saveInfomation(object, params),然后把結果收集到一個 List 里。 這里涉及到了最終操作。
最終操作(terminal operation)
peek() 并不是一個最終操作(terminal operation)。stream 被設計為“元素只有在最終操作需要時才會被處理”。如果沒有最終操作的“拉動”,那么 stream 中就沒有操作會真正執(zhí)行。
在上面的例子中,.collect(Collectors.toList())就是一個最終操作,而且這個操作會“拉動”所有元素。這樣一來,每個元素都一定會被應用 peek() 方法。
但在使用 peek() 時仍然需要注意,因為它只保證作用于流經(jīng)管道的元素,但并不保證全部元素都會流經(jīng)管道。
peek() vs forEach()
forEach() 則是一個最終操作。除此之外,peek() 和 forEach() 再無其他不同。
那么到底什么是最終操作,我們看如下代碼:
使用了forEach()之后,在結尾使用.collect方法會報錯。因為forEach() 已經(jīng)是一個最終操作無法再添加最終操作。
在使用peek()之后,可以使用.collect方法。
peek() 的典型用法:協(xié)助調(diào)試
正因為 peek() 不是一個最終操作,不會影響“哪些元素會流過”,所以十分適合在調(diào)試的時候,用來打印出流經(jīng)管道的元素。例如:
Stream.of("one", "two", "three", "four") .filter(e -> e.length() > 3) .peek(e -> System.out.println("Filtered value: " + e)) .map(String::toUpperCase) .peek(e -> System.out.println("Mapped value: " + e)) .collect(Collectors.toList());
總結
- 如果想對流經(jīng)的每個元素應用一個函數(shù),從而改變某些狀態(tài),那么請用 forEach();
- 如果想打印流經(jīng)的每個元素的狀態(tài)(日志或 debug),這時應該用 peek();
到此這篇關于java中stream的peek()用法詳解的文章就介紹到這了,更多相關stream的peek()內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
springboot整合netty實現(xiàn)心跳檢測和自動重連
本文主要介紹了Spring Boot中整合Netty實現(xiàn)心跳檢測和自動重連,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2024-11-11IntelliJ IDEA 2020.3.3現(xiàn)已發(fā)布!新增“受信任項目”功能
這篇文章主要介紹了IntelliJ IDEA 2020.3.3現(xiàn)已發(fā)布!新增“受信任項目”功能,本文給大家分享了idea2020.3.3激活碼的詳細破解教程,每種方法都很好用,使用idea2020.3以下所有版本,需要的朋友可以參考下2021-03-03Java 中 getClass() 方法的使用與原理深入分析(對象類型信息)
在 Java 編程中,getClass() 是一個非常重要的方法,它用于獲取對象的運行時類信息,無論是調(diào)試代碼、反射操作,還是類型檢查,getClass() 都扮演著關鍵角色,本文將深入探討 getClass() 的使用方法、底層原理以及實際應用場景,感興趣的朋友一起看看吧2024-12-12Spring Boot 與 kotlin 使用Thymeleaf模板引擎渲染web視圖的方法
這篇文章主要介紹了Spring Boot 與 kotlin 使用Thymeleaf模板引擎渲染web視圖的方法,本文給大家介紹的非常詳細,具有參考借鑒價值,需要的朋友可以參考下2018-01-01