用 Streams 進行資料轉換

Java 的輸入/輸出與串流

Alex Liu

Software Development Engineer

用 streams 進行資料轉換

  • 用 streams 進行資料轉換

    • 轉換資料格式、彙總與篩選資訊
    • 將結果存成新的集合型別(例如:從 List 轉為 Set
    • 支援的集合:
      • 清單(如 ArrayListLinkedList
      • 集合(如 HashSetTreeSet
      • 對映(Keys/Values 作為 Streams)(如 HashMapTreeMap
      • 陣列(透過 Arrays.stream()
  • 後續範例使用名為 namesArrayList

    names: ["Alice", "Bob", "Charlie", "David"]
    
Java 的輸入/輸出與串流

使用 Stream 轉換元素

  • 準備:匯入所需的 SetCollectorsStream 類別
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;

// 將先前建立的 `ArrayList` `names` 轉為 `Stream` Stream<String> namesStream = names.stream();
  • 目前資料:[Alice, Bob, Charlie, David]
Java 的輸入/輸出與串流

使用 Stream 轉換元素(續)

// 使用 `.map()` 將每個元素轉為大寫
Stream<String> upperCaseNameStream = namesStream.map(
        name -> name.toUpperCase())
  • 目前資料:[ALICE, BOB, CHARLIE, DAVID]
// 使用 `.collect()` 與 `Collectors.toSet()` 儲存轉換後的 stream 資料
upperCaseNameStream.collect(Collectors.toSet())
  • 最終資料:
    {CHARLIE, ALICE, BOB, DAVID}
    
Java 的輸入/輸出與串流

使用 Stream 進行彙總

  • .reduce() 方法

    • 將元素「聚合」為單一結果
    • 適用於「加總」、「串接」或「找最小/最大」
  • 使用 .reduce() 需兩個輸入

    • 初始值:累積的起始值,例如 0
    • 二元運算子:接收兩個參數的函式
      • (x, y) -> x + y 表示:
        • x 為目前累積總和
        • y 為正在處理的元素
        • y 加到 x,直到處理完所有元素
Java 的輸入/輸出與串流

使用 Stream 進行彙總:範例

  • ArrayList names 轉為 Stream 物件。
    Stream<String> stream = names.stream();
    
  • 使用 .map() 轉為名字長度,並用 .reduce() 加總
    stream
      .map(name -> name.length())
      .reduce(0, (sum, length) -> sum + length);
    
  • 結果:20
Java 的輸入/輸出與串流

一起來練習吧!

Java 的輸入/輸出與串流

Preparing Video For Download...