Streams 入門

Java 的輸入/輸出與串流

Alex Liu

Software Development Engineer

使用 Streams

  • Java Streams

    • 以函式式處理資料集合,提升大量資料的效能
    • 支援的集合:
      • List(如 ArrayListLinkedList
      • Set(如 HashSetTreeSet
      • Map(Keys/Values 作為 Streams)(如 HashMapTreeMap
      • 陣列(透過 Arrays.stream()
  • 之後示範將使用名為 namesArrayList

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

在 Stream 中使用 lambda 運算式

  • Lambda 運算式
    • 語法:(parameters) -> { expression }
names.forEach(
    // `name` is a parameter representing each element in the list
    name -> 
        // This is the expression executed for each element.
        System.out.println(name));
Alice 
Bob 
Charlie 
David
Java 的輸入/輸出與串流

建立 Stream

  • 將資料集合轉為 Stream

    • 對集合呼叫 .stream()
    • 支援 ListSetQueue
  • 匯入 Stream 類別

    import java.util.stream.Stream;
    
  • 將範例清單 names 轉為 stream,並用 .foreach() 存取每個元素
    Stream<String> stream = names.stream();
    stream.forEach(name -> System.out.println(name));
    
Java 的輸入/輸出與串流

使用 Streams 篩選資料

  • .filter() 篩選元素
    • 只保留符合條件的元素
  • 將範例清單 names 轉為 stream
    Stream<String> stream = names.stream();
    
  • .filter() 篩出以 A 開頭的元素,並用 .forEach() 印出
    stream
      .filter(name -> name.startsWith("A"))
      .forEach(name -> System.out.println(name));
    
  • 篩選結果:Alice
Java 的輸入/輸出與串流

使用 Streams 計數

  • .count() 計算元素數量

    • 回傳 long 格式
  • 將範例清單 names 轉為 stream

    Stream<String> stream = names.stream();
    
  • .filter() 篩出以 B 開頭的元素,並用 .count() 計數

    long count = names.stream()
      .filter(name -> name.startsWith("B"))
      .count();
    
  • 計數結果:1(只有 1 個元素 BobB 開頭)

Java 的輸入/輸出與串流

何時使用 Streams

  • 何時使用 Streams
    • 大型資料集:降低效能額外負擔
    • 函式式操作:比迴圈更易讀
    • 篩選與轉換:簡化程式碼
  • 何時「不要」使用 Streams
    • 需要修改原始集合時
    • 簡單且有副作用的迴圈
Java 的輸入/輸出與串流

一起來練習吧!

Java 的輸入/輸出與串流

Preparing Video For Download...