郎溪 溪流_到无限(溪流)和超越!
生活随笔
收集整理的這篇文章主要介紹了
郎溪 溪流_到无限(溪流)和超越!
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
郎溪 溪流
Java允許您處理集合或流中的數據。 將流視為將一個集合轉換為另一個集合的技術非常容易。 這可能會導致一些相當隨意的代碼,其中流數據被重復收集到某種類型的集合中,作為一個整體集合傳遞,然后再進行更多處理。
對于6個元素,誰在乎!
例:
// 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());上面提到的是代碼氣味,它是流的不斷收集和重新流式傳輸,大多數人可能會注意到這一點,并且如果這只是一種方法,則會刪除一些臨時列表。
大多數人會。 我見過人們不這樣做。
但是,如果上述方法使用子例程來處理事情,則很容易優化子例程的API的簡單性,并使它們接收和返回集合。 這樣您就可以完成上述行為。
解決方案是從filter , map和reduce類型函數的角度來看高層數據處理管道,并嘗試圍繞流對其進行建模。
但為什么?
將流視為無限
如今,我們的集裝箱很小,我們希望他們能充分利用它們的資源。 小型容器(如果連續運行)可以處理無限制的數據流。 如果我們想象所有數據都是潛在的無限流,并設計我們的軟件使用流技術來避免將所有數據都存儲到內存中,則會發生兩件事:
- 我們將所有情況下的流的最大內存需求優化為盡可能低
- 我們必須正確使用Streaming API ,并且最終得到更簡潔的代碼,因為Stream API的聲明性方面有助于描述數據轉換中發生的事情。 我們甚至可能在此過程中丟失了一些可怕的臨時變量……
上面的代碼將變為:
// 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
郎溪 溪流
總結
以上是生活随笔為你收集整理的郎溪 溪流_到无限(溪流)和超越!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 鳏夫怎么读 鳏夫的意思
- 下一篇: 朶怎么读 朶的拼音及解释