欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

如何使用Java8Stream和peek

這篇文章主要講解了如何使用Java 8 Stream和peek,內(nèi)容清晰明了,對(duì)此有興趣的小伙伴可以學(xué)習(xí)一下,相信大家閱讀完之后會(huì)有幫助。

成都網(wǎng)站制作、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)服務(wù)團(tuán)隊(duì)是一支充滿著熱情的團(tuán)隊(duì),執(zhí)著、敏銳、追求更好,是創(chuàng)新互聯(lián)的標(biāo)準(zhǔn)與要求,同時(shí)竭誠(chéng)為客戶提供服務(wù)是我們的理念。創(chuàng)新互聯(lián)把每個(gè)網(wǎng)站當(dāng)做一個(gè)產(chǎn)品來(lái)開(kāi)發(fā),精雕細(xì)琢,追求一名工匠心中的細(xì)致,我們更用心!

簡(jiǎn)介

java 8 stream作為流式操作有兩種操作類(lèi)型,中間操作和終止操作。這兩種有什么區(qū)別呢?

我們看一個(gè)peek的例子:

Stream<String> stream = Stream.of("one", "two", "three","four");
stream.peek(System.out::println);

上面的例子中,我們的本意是打印出Stream的值,但實(shí)際上沒(méi)有任何輸出。

為什么呢?

中間操作和終止操作

一個(gè)java 8的stream是由三部分組成的。數(shù)據(jù)源,零個(gè)或一個(gè)或多個(gè)中間操作,一個(gè)或零個(gè)終止操作。

中間操作是對(duì)數(shù)據(jù)的加工,注意,中間操作是lazy操作,并不會(huì)立馬啟動(dòng),需要等待終止操作才會(huì)執(zhí)行。

終止操作是stream的啟動(dòng)操作,只有加上終止操作,stream才會(huì)真正的開(kāi)始執(zhí)行。

所以,問(wèn)題解決了,peek是一個(gè)中間操作,所以上面的例子沒(méi)有任何輸出。

peek

我們看下peek的文檔說(shuō)明:peek主要被用在debug用途。

我們看下debug用途的使用:

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());

上面的例子輸出:

Filtered value: three
Mapped value: THREE
Filtered value: four
Mapped value: FOUR

上面的例子我們輸出了stream的中間值,方便我們的調(diào)試。

為什么只作為debug使用呢?我們?cè)倏匆粋€(gè)例子:

Stream.of("one", "two", "three","four").peek(u -> u.toUpperCase())
.forEach(System.out::println);

上面的例子我們使用peek將element轉(zhuǎn)換成為upper case。然后輸出:

one
two
three
four

可以看到stream中的元素并沒(méi)有被轉(zhuǎn)換成大寫(xiě)格式。

再看一個(gè)map的對(duì)比:

Stream.of("one", "two", "three","four").map(u -> u.toUpperCase())
.forEach(System.out::println);

輸出:

ONE
TWO
THREE
FOUR

可以看到map是真正的對(duì)元素進(jìn)行了轉(zhuǎn)換。

當(dāng)然peek也有例外,假如我們Stream里面是一個(gè)對(duì)象會(huì)怎么樣?

  @Data
  @AllArgsConstructor
  static class User{
    private String name;
  }

    List<User> userList=Stream.of(new User("a"),new User("b"),new User("c")).peek(u->u.setName("kkk")).collect(Collectors.toList());
    log.info("{}",userList);

輸出結(jié)果:

10:25:59.784 [main] INFO com.flydean.PeekUsage - [PeekUsage.User(name=kkk), PeekUsage.User(name=kkk), PeekUsage.User(name=kkk)]

我們看到如果是對(duì)象的話,實(shí)際的結(jié)果會(huì)被改變。

為什么peek和map有這樣的區(qū)別呢?

我們看下peek和map的定義:

Stream<T> peek(Consumer<&#63; super T> action)
<R> Stream<R> map(Function<&#63; super T, &#63; extends R> mapper);

peek接收一個(gè)Consumer,而map接收一個(gè)Function。

Consumer是沒(méi)有返回值的,它只是對(duì)Stream中的元素進(jìn)行某些操作,但是操作之后的數(shù)據(jù)并不返回到Stream中,所以Stream中的元素還是原來(lái)的元素。

而Function是有返回值的,這意味著對(duì)于Stream的元素的所有操作都會(huì)作為新的結(jié)果返回到Stream中。

這就是為什么peek String不會(huì)發(fā)生變化而peek Object會(huì)發(fā)送變化的原因。

看完上述內(nèi)容,是不是對(duì)如何使用Java 8 Stream和peek有進(jìn)一步的了解,如果還想學(xué)習(xí)更多內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

本文標(biāo)題:如何使用Java8Stream和peek
本文URL:http://www.aaarwkj.com/article26/gjgocg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開(kāi)發(fā)、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)電子商務(wù)、面包屑導(dǎo)航、Google、軟件開(kāi)發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化
欧美日本国产老熟女视频| 亚洲人成免费在线观看| 我的农村中年激情熟妇| 日韩精品中文字幕有码在线| 日韩黄色精品中文视频| 日韩欧美亚洲制服丝袜| 国产在线观看91精品一区| 午夜福利福利一区二区| 最新免费观看男女啪啪视频 | 成人性生交大片免费男同| 黄色录像免费一内片一级| 人妻上司无奈中文字幕| 亚洲欧美日韩精品av| 亚洲欧美日韩成人在线观看| 久久尤物av天堂日日综合| 久久人人97超碰人人爱一久久精品| 漂亮人妻中文字幕av| 欧美黄色一级在线免费观看 | 福利在线午夜绝顶三级| 国产亚洲精品久久综合阿香| 91欧美在线激情视频| 国语对白自拍视频在线播放| 国产精品一区二区婷婷| 少妇高潮一区二区三区在线| 亚洲香蕉av一区二区蜜桃| 久草福利在线观看免费| 国产精品一区日韩专区| 麻豆精品情欲人妻二区| 久久人热视频这里只有精品| 日本人妻丰满熟妇久久| 亚洲精品丝袜成人偷拍| 三级黄色片免费久久久| 欧美日韩国产在线91| 精品国产一区二区成人| 亚洲中少妇久久中文字幕| 欧美久久久久综合一区| 国产精品一区二在线观看| 国产精品无卡无在线播放| 国产av高清视频在线| 高质量的性生活在线观看| 欧美亚洲精品二区久久久|