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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

到无限(溪流)和超越!

發(fā)布時(shí)間:2023/12/3 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 到无限(溪流)和超越! 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Java允許您處理集合或流中的數(shù)據(jù)。 將流視為將一個(gè)集合轉(zhuǎn)換為另一個(gè)集合的技術(shù)非常容易。 這可能會(huì)導(dǎo)致一些相當(dāng)隨意的代碼,在該代碼中,流數(shù)據(jù)被重復(fù)收集到某種類型的集合中,作為整體集合傳遞,然后再進(jìn)行更多處理。

對(duì)于6個(gè)元素,誰在乎!

例:

// imaginary input List<String> list = asList( "Foo" , "Bar" , "Baz" ); // conversion and sending List<String> bs = list.stream() .filter(item -> item.startsWith( "B" )) .collect(toList()); List<Wrapped> wrapped = bs.stream() .map(Wrapped:: new ) .collect(toList()); sendWrappedItems(wrapped.stream());

上面有一個(gè)代碼氣味,它是流的不斷收集和重新流式傳輸,大多數(shù)人可能會(huì)注意到這一點(diǎn),并且如果這只是一種方法,則會(huì)刪除一些臨時(shí)列表。

大多數(shù)人會(huì)。 我見過人們不這樣做。

但是,如果上述方法使用子例程來處理事物,則很容易優(yōu)化子例程的API的簡單性,并使它們接收和返回集合。 這樣您就可以完成上述行為。

解決方案是根據(jù)filter , map和reduce類型函數(shù)從更高層次看待數(shù)據(jù)處理管道,并嘗試圍繞流對(duì)其進(jìn)行建模。

但為什么?

將流視為無限

如今,我們的集裝箱很小,我們希望他們能充分利用它們的資源。 小型容器(如果連續(xù)運(yùn)行)可以處理無限制的數(shù)據(jù)流。 如果我們想象所有數(shù)據(jù)都是潛在的無限流,并設(shè)計(jì)我們的軟件使用流技術(shù)來避免將所有數(shù)據(jù)都存儲(chǔ)到內(nèi)存中,則會(huì)發(fā)生兩件事:

  • 我們將所有情況下的流的最大內(nèi)存需求優(yōu)化為盡可能低
  • 我們必須正確使用Streaming API,最后得到更簡潔的代碼,因?yàn)镾tream API的聲明性方面有助于描述數(shù)據(jù)轉(zhuǎn)換中發(fā)生的事情。 在此過程中,我們甚至可能丟失了一些可怕的臨時(shí)變量……

上面的代碼將變?yōu)?#xff1a;

// imaginary input List<String> list = asList( "Foo" , "Bar" , "Baz" ); // conversion and sending sendWrappedItems(list.stream() .filter(item -> item.startsWith( "B" )) .map(Wrapped:: new ));

翻譯自: https://www.javacodegeeks.com/2019/11/to-infinity-streams-and-beyond.html

總結(jié)

以上是生活随笔為你收集整理的到无限(溪流)和超越!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。