<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    John Jiang

    a cup of Java, cheers!
    https://github.com/johnshajiang/blog

       :: 首頁 ::  :: 聯系 :: 聚合  :: 管理 ::
      131 隨筆 :: 1 文章 :: 530 評論 :: 0 Trackbacks
    Java流的8個特性
    本文是稍早前java.net推薦的一篇博文,描述了Java流的8個有用的特性。(2014.03.07最后更新)

    Lamba表達式是Java8到目前為止最棒的特性。但我認為有一個秘密武器展示了Lambda這一"語法糖"在提高代碼可讀性和可寫性方面是何其的強大。當你在改進代碼的表現力時,那么在對代碼的理解方面你就上升到了新的境界,這能使最笨拙的工作變得簡單。

    是什么秘密武器呢?就是Java Stream API。最近我參與了一個在線比賽,就是在一個對性能要求較高的環境中簡單地使用Java Stream。令我驚訝的是,這個API讓編寫主要的循環程序變得十分簡單,而且能很好地適應我所做出的眾多變化。下面就是我所學到的8個特性。

    1. Java流不需要Lambda表達式
    盡管這個API確實從Lambda表達式中獲準良多,但你并不必非得使用Lambda。你可以回過去使用匿名內部類,但為什么要這么做呢?較可能的場景是,使用一個方法引用(例如Integer::valueOf),或者一個實例對象。使用方法引用可將復雜的多行邏輯置于循環體之外,就如你在優化一個hash set查找時所看到的。而實例對象可用于實現"四人幫"的策略模式。但請不要使用匿名內部類,除非你不得不這么做。

    2. 窺入流內進行調試
    你可以在流的任何位置放入你所想加進去的媒質,這個媒質稱為peek。該操作使用了一個消費者對象,并期望不產生任何結果,因為Lambda一般只返回空。我喜歡把peek用于向系統發送調試信息,就如
    .peek(System.out::println)
    .peek(it 
    -> System.out.printf("it is %s%n", it)

    3. 流化隨機成員
    流并不局限于集合或數組,甚至是固定鏈表。如果你能創建一個Iterator或Supplier Lambda來創建流中的值,然后你就可以使用類java.util.stream.StreamSupport中的方法來創建一個流了。可以設想一個使用持續測量值,如內存消耗量或網絡吞量,來驅動的流。

    4. 流化隨機數
    如果你正在尋找一個簡單的隨機數,例如可以通過java.util.Random,這個類現在有了三個新的set方法ints(),longs()和doubles()來創建流。這些方法的重載版本可以讓你設置邊界,隨機種子以及流中隨機數的總量。

    5. 流化I/O Reader
    Java程序員的另一個常見工作就是一行一行地解析文件。現在java.io.BufferedReader有了一個新方法lines(),它會將I/O流轉化為一個字符串流,以便于流的處理。

    6. 流化文件樹
    如果訪問的文件并不是你的菜,那就試試訪問一個文件樹會怎么樣?類java.nio.file.Files中有幾個方法都可以返回流。list()方法將列出一個目錄下的所有文件,walk()方法將會遞歸地做到這一點,而filter()方法也會遞歸地訪問這些文件,但會使用一些屬性來進行過濾(當你有一個Path對象,有些事情會變得復雜起來)。你依然可以使用lines(Path)方法來通過流去獲取內容。

    7. 流化復雜文本
    如果你依然念念不忘文本處理,但內容并不是基于行,那么就可以在java.util.regex.Pattern實例中使用splitAsStream(CharSequence)方法。這對于處理有數百萬列的CSV文件或CLASSPATH十分有用。

    8. 流化ZIP文件
    說到對長CLASSPATH的搜索,你也可以很簡單地調用名為stream的方法來流化java.util.zip.ZipFiles和java.util.jar.JarFiles,它會相應地返回一個ZipEntry或JarEntry實例。

    如果你都已經干過這些事了,那么你肯定知道它們并不是Java流的基本用途。不過將來會有足夠多的博文去涉及Java流的基礎。我只是認為上述這些都是被掩藏起來的寶藏,它們揭示了Java流的潛質。
    posted on 2014-02-28 15:25 John Jiang 閱讀(1024) 評論(0)  編輯  收藏 所屬分類: JavaSEJava翻譯
    主站蜘蛛池模板: 亚洲精品亚洲人成在线观看麻豆| 午夜成人免费视频| 亚洲熟妇无码八AV在线播放| 最好2018中文免费视频| 国产免费人视频在线观看免费 | 国内少妇偷人精品视频免费| 亚洲成a人无码亚洲成www牛牛| 亚洲一区在线免费观看| 91嫩草亚洲精品| 精品无码一级毛片免费视频观看 | 四虎影视大全免费入口| 亚洲精品久久无码| 亚洲XX00视频| 特级做A爰片毛片免费看无码| 亚洲人成电影在线天堂| 国产乱码免费卡1卡二卡3卡| 亚洲欧洲国产综合AV无码久久| 国产成人精品免费视频软件| 黄网站色视频免费看无下截| 亚洲色欲色欲www在线丝| 免费污视频在线观看| 亚洲一级毛片在线播放| 国产成人免费网站在线观看| 中文字幕免费在线视频| 亚洲一区二区三区夜色 | 久久国产成人亚洲精品影院| 国产精品白浆在线观看免费 | 激情小说亚洲色图| 亚洲精品无码专区在线在线播放 | 亚洲性色高清完整版在线观看| 日韩高清免费在线观看| 99视频免费在线观看| 亚洲av专区无码观看精品天堂| 亚洲国产成人爱av在线播放| 99久热只有精品视频免费观看17 | 青青操视频在线免费观看| 亚洲成人动漫在线观看| 深夜国产福利99亚洲视频| 亚洲天堂男人影院| 亚洲综合精品网站| 无人在线观看免费高清视频|