改變元素的內(nèi)部狀態(tài),對每個object執(zhí)行 saveInfomation(object, params),然后把結果收集到一個 List 里,這里涉及到了最終操作,需要的朋友可以參考下" />

欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java中stream的peek()用法詳解

 更新時間:2024年01月19日 09:54:55   作者:CUIYD_1989  
這篇文章主要介紹了java中stream的peek()用法詳解,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());

總結

  1. 如果想對流經(jīng)的每個元素應用一個函數(shù),從而改變某些狀態(tài),那么請用 forEach();
  2. 如果想打印流經(jīng)的每個元素的狀態(tài)(日志或 debug),這時應該用 peek();

到此這篇關于java中stream的peek()用法詳解的文章就介紹到這了,更多相關stream的peek()內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java中String類常用方法詳細匯總

    Java中String類常用方法詳細匯總

    Java中String類在所有項目開發(fā)里面一定會用到,因此String類提供了一系列的功能操作方法,下面這篇文章主要給大家介紹了關于Java中String類常用方法的相關資料,需要的朋友可以參考下
    2023-05-05
  • springboot整合netty實現(xiàn)心跳檢測和自動重連

    springboot整合netty實現(xiàn)心跳檢測和自動重連

    本文主要介紹了Spring Boot中整合Netty實現(xiàn)心跳檢測和自動重連,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-11-11
  • 詳解租約機制以及在hbase中的應用

    詳解租約機制以及在hbase中的應用

    這篇文章主要介紹了詳解租約機制以及在hbase中的應用的相關資料,需要的朋友可以參考下
    2017-02-02
  • Kotlin中的抽象類實現(xiàn)

    Kotlin中的抽象類實現(xiàn)

    這篇文章主要介紹了Kotlin中的抽象類實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-11-11
  • Java中兩種基本的輸入方式小結

    Java中兩種基本的輸入方式小結

    這篇文章主要介紹了Java中兩種基本的輸入方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • IntelliJ IDEA 2020.3.3現(xiàn)已發(fā)布!新增“受信任項目”功能

    IntelliJ IDEA 2020.3.3現(xiàn)已發(fā)布!新增“受信任項目”功能

    這篇文章主要介紹了IntelliJ IDEA 2020.3.3現(xiàn)已發(fā)布!新增“受信任項目”功能,本文給大家分享了idea2020.3.3激活碼的詳細破解教程,每種方法都很好用,使用idea2020.3以下所有版本,需要的朋友可以參考下
    2021-03-03
  • Java 中 getClass() 方法的使用與原理深入分析(對象類型信息)

    Java 中 getClass() 方法的使用與原理深入分析(對象類型信息)

    在 Java 編程中,getClass() 是一個非常重要的方法,它用于獲取對象的運行時類信息,無論是調(diào)試代碼、反射操作,還是類型檢查,getClass() 都扮演著關鍵角色,本文將深入探討 getClass() 的使用方法、底層原理以及實際應用場景,感興趣的朋友一起看看吧
    2024-12-12
  • Java中操作Word修訂功能的示例詳解

    Java中操作Word修訂功能的示例詳解

    Word的修訂功能是一種在文檔中進行編輯和審閱的功能,它允許多個用戶對同一文檔進行修改并跟蹤這些修改,以便進行審查和接受或拒絕修改,下面我們就來學習一下Java中操作Word修訂功能的方法,需要的可以參考下
    2023-12-12
  • 關于Java類的構造方法詳解

    關于Java類的構造方法詳解

    這篇文章主要介紹了關于Java類的構造方法詳解的相關資料,需要的朋友可以參考下
    2023-01-01
  • Spring Boot 與 kotlin 使用Thymeleaf模板引擎渲染web視圖的方法

    Spring Boot 與 kotlin 使用Thymeleaf模板引擎渲染web視圖的方法

    這篇文章主要介紹了Spring Boot 與 kotlin 使用Thymeleaf模板引擎渲染web視圖的方法,本文給大家介紹的非常詳細,具有參考借鑒價值,需要的朋友可以參考下
    2018-01-01

最新評論