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

Input/Output และ Streams ใน Java

Alex Liu

Software Development Engineer

การแปลงข้อมูลด้วย streams

  • การแปลงข้อมูลด้วย streams

    • แปลงรูปแบบข้อมูล รวมถึงการรวมและกรองข้อมูล
    • เก็บผลลัพธ์ในคอลเลกชันประเภทใหม่ (เช่น จาก List เป็น Set)
    • คอลเลกชันที่รองรับ:
      • 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

การใช้ Stream เพื่อแปลงข้อมูล

  • เตรียมการ: import คลาส Set, Collectors และ Stream ที่จำเป็น
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;

// Convert the `ArrayList` we created earlier `names` to a `Stream` Stream<String> namesStream = names.stream();
  • ข้อมูลปัจจุบัน: [Alice, Bob, Charlie, David]
Input/Output และ Streams ใน Java

การใช้ Stream เพื่อแปลงข้อมูล (ต่อ)

// Use `.map()` to convert each element to upper case
Stream<String> upperCaseNameStream = namesStream.map(
        name -> name.toUpperCase())
  • ข้อมูลปัจจุบัน: [ALICE, BOB, CHARLIE, DAVID]
// use `.collect()` and `Collectors.toSet()` to store the transformed stream data
upperCaseNameStream.collect(Collectors.toSet())
  • ข้อมูลสุดท้าย:
    {CHARLIE, ALICE, BOB, DAVID}
    
Input/Output และ Streams ใน Java

การใช้ Stream สำหรับการรวมข้อมูล

  • เมธอด .reduce()

    • รวมข้อมูลทุกตัวให้เป็นผลลัพธ์เดียว
    • เหมาะสำหรับการหาผลรวม, การต่อสตริง, หรือการหาค่า min/max
  • .reduce() รับค่าอินพุต 2 ตัว

    • ค่าเริ่มต้น (Initial Value): ค่าตั้งต้นสำหรับการสะสม เช่น 0
    • Binary Operator: ฟังก์ชันที่รับอาร์กิวเมนต์สองตัว
      • (x, y) -> x + y หมายความว่า:
        • x แทนค่าสะสมที่ได้จนถึงขณะนั้น
        • y แทนข้อมูลตัวปัจจุบันที่กำลังประมวลผล
        • การดำเนินการนี้จะบวก y เข้ากับ x ไปเรื่อย ๆ จนครบทุกตัว
Input/Output และ Streams ใน Java

การใช้ Stream สำหรับการรวมข้อมูล: ตัวอย่าง

  • แปลง ArrayList ชื่อ names ให้เป็น Stream object
    Stream<String> stream = names.stream();
    
  • ใช้ .map() แปลงชื่อเป็นความยาว แล้วใช้ .reduce() รวมค่าทั้งหมด
    stream
      .map(name -> name.length())
      .reduce(0, (sum, length) -> sum + length);
    
  • ผลลัพธ์: 20
Input/Output และ Streams ใน Java

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

Input/Output และ Streams ใน Java

Preparing Video For Download...