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

如何使用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)化
国产精品国产三级专区| 麻豆精品午夜福利在线| av黄色成人在线观看| 精品综合亚洲中文字幕| 亚洲精品欧美日韩久久| 亚洲日本中文字幕免费观看| 国产一区二区三区婷婷| 91九色最新国产在线| 国产av一区二区三区最新精品| 日韩欧美一区二区三区在线| 国产精品精品国产一区二区| 亚洲av成人噜噜网站| 男人av天堂手机在线| 国产丝袜美腿诱惑久久| 成人大片在线免费观看视频| av黄色在线播放网页| 日本免费精品一区二区三区中| 国产精品中文字幕有码| 日韩av在线观看大全| 特黄特色的日本大片| 蜜臀av中文字幕亚洲| 一级黄片一区二区三区| 国产九色av在线一区尤物| 日本午夜视频一区二区| 国内精品偷拍一区二区三区| av在线免费观看美日韩| 欧美一区二区三区十区| 午夜理论片在线观看有码| 亚洲日本韩国福利久久| 伊人蕉影院久亚洲高清| 国产精品又大又黑又长又粗| 婷婷亚洲五月伊人91| 日韩亚洲毛片全在线播放| 亚洲综合福利视频网站| 婷婷国产成人久久精品激情| 国产成年人免费小视频| 中文字幕乱码av一区二区| 日韩精品二区在线观看| 99精品国产高清一区二区三区| 亚洲av毛片一区二区| 亚洲精品深夜福利视频|