日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java peek函数_Java 8 Stream Api 中的 peek 操作

發布時間:2023/12/13 java 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java peek函数_Java 8 Stream Api 中的 peek 操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 前言

我在 Java 8 Stream API中的 map 和flatMap 中講述了Java8 Stream API中 map 操作和 flatMap 操作的區別。然后有小伙伴告訴我 peek 操作 也能實現元素的處理。但是你知道 map 和 peek 的區別嗎? map 我們在開頭文章已經講過了,你可以去詳細了解一下它,本文將重點講解一下 peek 操作。

2. peek

peek 操作接收的是一個 Consumer 函數。顧名思義 peek 操作會按照 Consumer 函數提供的邏輯去消費流中的每一個元素,同時有可能改變元素內部的一些屬性。

這里我們要提一下這個 Consumer 以理解 什么是消費。

2.1 什么是消費 (Consumer)

package java.util.function;

import java.util.Objects;

@FunctionalInterface

public interface Consumer {

void accept(T t);

// 嵌套accept , 順序為先執行 accept 后執行參數里的 after.accpet

default Consumer andThen(Consumer super T> after) {

Objects.requireNonNull(after);

return (T t) -> { accept(t); after.accept(t); };

}

}

Consumer 是一個函數接口。一個抽象方法 void accept(T t) 意為接受一個 T 類型的參數并將其消費掉。其實消費給我的感覺就是 “用掉” ,自然返回的就是 void 。 通?!坝玫簟?T 的方式為兩種:

T 本身的 void 方法 比較典型的就是 setter 。

把 T 交給其它接口(類)的 void 方法進行處理 比如我們經常用的打印一個對象 System.out.println(T)

2.2 peek 操作演示

Stream stream = Stream.of("hello", "felord.cn");

stream.peek(System.out::println);

如果你測試了上面給出的代碼你會發現,壓根不會按照邏輯跑。這是為啥子呢? 這是因為流的生命周期有三個階段:

起始生成階段。

中間操作會逐一獲取元素并進行處理。 可有可無。所有中間操作都是惰性的,因此,流在管道中流動之前,任何操作都不會產生任何影響。

終端操作。通常分為 最終的消費 (foreach 之類的)和 歸納 (collect)兩類。還有重要的一點就是終端操作啟動了流在管道中的流動。

所以應該改成下面:

Stream stream = Stream.of("hello", "felord.cn");

List strs= stream.peek(System.out::println).collect(Collectors.toLIst());

比如下圖,我們給圓球加了一個框:

3. peek VS map

peek 操作 一般用于不想改變流中元素本身的類型或者只想操作元素的內部狀態時;而 map 則用于改變流中元素本身類型,即從元素中派生出另一種類型的操作。這是他們之間的最大區別。

那么 peek 實際中我們會用于哪些場景呢?比如對 Stream 中的 T 的某些屬性進行批處理的時候用 peek 操作就比較合適。 如果我們要從 Stream 中獲取 T 的某個屬性的集合時用 map 也就最好不過了。

4. 總結

我們今天了解 Stream 的 peek 操作,同時也回顧了 Stream 的生命周期。也順帶對 Consumer 函數進行了講解。而且 和 map 相互做了比較,對各自的使用場景又做了說明。相信看過本文后你對它們會有更深的理解。

關注公眾號:Felordcn獲取更多資訊

總結

以上是生活随笔為你收集整理的java peek函数_Java 8 Stream Api 中的 peek 操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。