到无限(溪流)和超越!
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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (gd linux)
- 下一篇: hadoop的开发工具_Hadoop开发