在個人SpringBoot2.0不容錯過的新特性 WebFlux響應式編程裏面,有同窗問如何使用stream統計單詞數。這是個好例子,也很典型,在這裏補上。html
下面的例子實現了從一個文本文件讀取(英文)文本並統計單詞數的功能。java
package com.imooc; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; /** * 使用stream統計文章單詞數 * * @author 曉風輕 * */ public class StreamWordDemo { public static void main(String[] args) throws IOException { // 使用try-resource 關閉資源 try (BufferedReader reader = new BufferedReader( new FileReader("webflux.txt"))) { long wordCount = reader.lines() // trim先後空格(使用方法引用) .map(String::trim) // 過濾掉空串 .filter(s -> !s.isEmpty()) // 把空格隔開的轉爲單詞數組 .map(s -> s.split(" ")) // 獲得數組長度 .mapToInt(array -> array.length) // 並行(都是無狀態操做) .parallel() // 求和 .sum(); System.out.println("單詞數:" + wordCount); } } }
牽涉的知識點主要仍是lambda表達式和stream的基本應用。你們能夠看出,使用stream編程代碼很是清晰和簡單,可讀性很強。react
下面獲取每一個單詞出現的次數git
// 使用try-resource 關閉資源 try (BufferedReader reader = new BufferedReader( new FileReader("webflux.txt"))) { Map<String, Long> counts = reader.lines() // trim先後空格(使用方法引用) .map(String::trim) // 過濾掉空串 .filter(s -> !s.isEmpty()) // 把空格隔開的轉爲數組 .map(s -> s.split(" ")) // 數組轉成流 .map(array -> Stream.of(array)) // 拉平 .flatMap(stream -> stream) // 分組 .collect(Collectors.groupingBy(s -> s, Collectors.counting())); System.out.println("單詞出現次數:" + counts); // 統計信息 LongSummaryStatistics summaryStatistics = counts.entrySet().stream() // 獲得次數 .mapToLong(entry -> entry.getValue()) // 統計 .summaryStatistics(); System.out.println("統計信息:" + summaryStatistics); } 輸出的統計
信息爲:
統計信息:LongSummaryStatistics{count=170, sum=271, min=1, average=1.594118, max=14}github
能夠看出,一共有271個單詞,不一樣的詞有170個,出現最多的14次,最少1次,平均1.594118次。web
這就是stream的編程風格,其中lambda表達式是函數式編程的基礎,是後面的stream,reactor的前置基礎知識。對lambda表達式,stream流編程以及響應式編程webflux有更多興趣的能夠學習個人實戰課程 SpringBoot2.0不容錯過的新特性 WebFlux響應式編程,裏面有詳細的講解,課程乾貨滿滿,7小時只須要128元,海量的知識點的底層實現講解和本身動手編寫響應式的相似feign的restclient,絕對物超所值!spring
上面範例代碼github地址:stream流編程處理單詞編程
做者: 曉風輕
連接:https://www.imooc.com/article/27508
來源:慕課網
本文原創發佈於慕課網 ,轉載請註明出處,謝謝合做數組