แนะนำ Streams

Input/Output และ Streams ใน Java

Alex Liu

Software Development Engineer

การทำงานกับ Streams

  • Java Streams

    • ประมวลผลคอลเลกชันข้อมูลแบบ functional และเพิ่ม ประสิทธิภาพ สำหรับ ข้อมูลขนาดใหญ่
    • คอลเลกชันที่รองรับ:
      • Lists (เช่น ArrayList, LinkedList)
      • Sets (เช่น HashSet, TreeSet)
      • Maps (Keys/Values เป็น Streams) (เช่น HashMap, TreeMap)
      • Arrays (ผ่าน Arrays.stream())
  • ตัวอย่าง ArrayList ชื่อ names ที่ใช้ตลอดวิดีโอนี้

    names: ["Alice", "Bob", "Charlie", "David"]
    
Input/Output และ Streams ใน Java

การใช้ lambda expressions กับ Stream

  • Lambda Expressions
    • Syntax: (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
Input/Output และ Streams ใน Java

การสร้าง Stream

  • แปลงคอลเลกชันข้อมูลเป็น Stream

    • ใช้ .stream() กับคอลเลกชัน
    • รองรับ List, Set และ Queue
  • Import คลาส Stream

    import java.util.stream.Stream;
    
  • แปลงลิสต์ตัวอย่าง names เป็น stream และใช้ .foreach() เข้าถึงแต่ละ element
    Stream<String> stream = names.stream();
    stream.forEach(name -> System.out.println(name));
    
Input/Output และ Streams ใน Java

การกรองข้อมูลด้วย Streams

  • ใช้ .filter() เพื่อเลือก element
    • เก็บเฉพาะ element ที่ตรงเงื่อนไข
  • แปลงลิสต์ตัวอย่าง names เป็น stream
    Stream<String> stream = names.stream();
    
  • ใช้ .filter() เลือก element ที่ขึ้นต้นด้วย A และใช้ .forEach() พิมพ์ผลลัพธ์
    stream
      .filter(name -> name.startsWith("A"))
      .forEach(name -> System.out.println(name));
    
  • ผลลัพธ์จากการกรอง: Alice
Input/Output และ Streams ใน Java

การนับ element ด้วย Streams

  • ใช้ .count() เพื่อนับจำนวน element

    • คืนค่าในรูปแบบ long
  • แปลงลิสต์ตัวอย่าง names เป็น stream

    Stream<String> stream = names.stream();
    
  • ใช้ .filter() เลือก element ที่ขึ้นต้นด้วย B และใช้ .count() นับจำนวน

    long count = names.stream()
      .filter(name -> name.startsWith("B"))
      .count();
    
  • ผลลัพธ์: 1 (มีเพียง 1 element คือ Bob ที่ขึ้นต้นด้วย B)

Input/Output และ Streams ใน Java

ควรใช้ Streams เมื่อใด

  • ควรใช้ Streams เมื่อ:
    • ข้อมูลขนาดใหญ่: ลด overhead ด้านประสิทธิภาพ
    • ต้องการ functional operations: อ่านง่ายกว่าการใช้ loop
    • กรองและแปลงข้อมูล: ทำให้โค้ดกระชับขึ้น
  • ไม่ควรใช้ Streams เมื่อ:
    • ต้องการแก้ไขคอลเลกชันต้นฉบับโดยตรง
    • ใช้ loop ธรรมดาที่มี side effects
Input/Output และ Streams ใน Java

มาฝึกกันเถอะ!

Input/Output และ Streams ใน Java

Preparing Video For Download...