Dart Academy · บทเรียน

แปลงสตรีม: map, where และ take

ปรับรูปแบบลำดับเหตุการณ์

บทเรียน 3 จาก 413 ขั้นตอน

แปลงสตรีม: map, where และ take เป็นบทเรียน Dart Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Dart Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Dart Academy มีบทเรียนทั้งหมด 4 บทเรียน

สตรีมปรับรูปแบบได้

เช่นเดียวกับรายการ สตรีมมีเมธอดที่มีประโยชน์สำหรับปรับรูปแบบเหตุการณ์ คุณสามารถ แปลงรูปแบบสตรีมให้เป็นสตรีมใหม่ได้โดยไม่แตะต้องแหล่งข้อมูลเดิม

map แปลงแต่ละเหตุการณ์

เมธอด map จะเรียกใช้ฟังก์ชันกับทุกเหตุการณ์แล้วส่งผลลัพธ์ออกมา ทำให้สตรีมค่าหนึ่งกลายเป็นสตรีมค่าที่ผ่านการแปลงแล้ว

final doubled = numbers.map((n) => n * 2);

map คงจำนวนไว้

เมื่อใช้ map จำนวนเหตุการณ์จะยังเท่าเดิม โดยเปลี่ยนเฉพาะรูปแบบของค่าเท่านั้น อินพุตสามค่าจะให้เอาต์พุตสามค่าเสมอ ✨

Stream.fromIterable([1, 2, 3])
    .map((n) => 'Item $n');

where กรองเหตุการณ์

เมธอด where จะเก็บไว้เฉพาะเหตุการณ์ที่ผ่านการทดสอบ ส่วนใดก็ตามที่คืนค่า false จะถูกตัดออกจากสตรีมใหม่

final evens = numbers.where((n) => n.isEven);

where อาจทำให้สตรีมสั้นลง

ต่างจาก map ตรงที่ where อาจส่งเหตุการณ์ออกมาน้อยกว่าจำนวนที่ได้รับ หากไม่มีเหตุการณ์ใดผ่านการทดสอบ สตรีมผลลัพธ์ก็จะยังว่างเปล่า

take จำกัดจำนวน

เมธอด take จะส่งเฉพาะเหตุการณ์ n รายการแรกออกมา แล้วหยุดรับฟัง เหมาะอย่างยิ่งเมื่อคุณต้องการเพียงไม่กี่ค่าจากสตรีมที่ยาวมาก 🎯

final firstThree = bigStream.take(3);

take ยกเลิกก่อนกำหนด

หลังจากส่งเหตุการณ์ครบ n รายการแล้ว take จะยกเลิกการสมัครรับแหล่งข้อมูลโดยอัตโนมัติ จากนั้นสตรีมต้นฉบับจะหยุดผลิตข้อมูลให้คุณ

เชื่อมการแปลงเข้าด้วยกัน

เมธอดเหล่านี้คืนค่าสตรีมใหม่ คุณจึงสามารถ เชื่อมต่อ เมธอดเหล่านี้เข้าด้วยกันได้ อ่านห่วงโซ่จากซ้ายไปขวา: กรอง จากนั้นแปลง แล้วจึงจำกัดจำนวน

numbers
    .where((n) => n.isEven)
    .map((n) => n * 10)
    .take(2);

ประเมินเมื่อจำเป็น

การแปลงมีลักษณะ ประเมินเมื่อจำเป็น โดยจะไม่มีอะไรทำงานจนกว่าคุณจะเริ่มรับฟัง ห่วงโซ่จะประมวลผลเหตุการณ์ทีละรายการเมื่อเหตุการณ์มาถึงเท่านั้น

เครื่องมือเพิ่มเติม: takeWhile และ skip

นอกจากสามเมธอดหลักแล้ว takeWhile จะส่งเหตุการณ์ออกไปตราบใดที่การทดสอบยังผ่าน ส่วน skip จะข้ามเหตุการณ์ n รายการแรก รูปแบบการเชื่อมต่อเมธอดยังคงเหมือนเดิม

stream.skip(2).takeWhile((n) => n < 100);

นำผลลัพธ์ไปใช้งาน

หลังจากแปลงแล้ว ให้อ่านสตรีมใหม่ด้วย await for หรือ listen ค่าที่ส่งออกมาแต่ละค่าจะผ่านห่วงโซ่ทั้งหมดของคุณมาเรียบร้อยแล้ว

await for (final v in transformed) {
  print(v);
}

ตรวจสอบความเข้าใจ

เมธอดใดสามารถลดจำนวนเหตุการณ์ได้

ทบทวน

คุณสามารถปรับรูปแบบสตรีมด้วย map เพื่อแปลงข้อมูล ใช้ where เพื่อกรอง และใช้ take เพื่อจำกัดจำนวน โดยเมธอดทั้งหมดเชื่อมต่อกันได้และจะประเมินเมื่อเริ่มรับฟังเท่านั้น 🎉

เริ่มต้นได้ฟรี

เรียนรู้ Dart ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
30
บทเรียน
120

คำถามที่พบบ่อย

บทเรียน “แปลงสตรีม: map, where และ take” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “แปลงสตรีม: map, where และ take” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Dart Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Dart Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “แปลงสตรีม: map, where และ take”

ปรับรูปแบบลำดับเหตุการณ์ คุณปฏิบัติ Dart Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Dart Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Dart Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “แปลงสตรีม: map, where และ take” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Dart Academy นี้ได้ไหม

ได้ บทเรียน Dart Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. รับฟังด้วย await for
  2. สตรีมแบบเดี่ยวกับแบบกระจายเสียง
  3. แปลงสตรีม: map, where และ take
  4. สร้างสตรีมด้วย async*
← กลับไปที่ Dart Academy