0Pricing
Scala for Backend Engineering & Functional Programming · บทเรียน

การแปลงข้อมูล

map, filter, flatMap

การแปลงข้อมูล เป็นบทเรียน Scala for Backend Engineering & Functional Programming ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Scala for Backend Engineering & Functional Programming และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Scala for Backend Engineering & Functional Programming มีบทเรียนทั้งหมด 4 บทเรียน

การแปลงคอลเลกชัน

คอลเลกชันของ Scala เป็นแบบเปลี่ยนแปลงไม่ได้โดยค่าเริ่มต้น แทนที่จะเปลี่ยนแปลงคอลเลกชันโดยตรง คุณจะเปลี่ยนคอลเลกชันให้เป็นคอลเลกชันใหม่ด้วยเมธอด เช่น map, filter และ flatMap

object Main {
  def main(args: Array[String]): Unit = {
    val nums = List(1, 2, 3, 4)
    val doubled = nums.map(_ * 2)
    println(nums)
    println(doubled)
  }
}

map: แปลงทุกองค์ประกอบ

map ใช้ฟังก์ชันกับแต่ละองค์ประกอบและคืนคอลเลกชันใหม่ที่มีขนาดเท่าเดิม ประเภทขององค์ประกอบอาจเปลี่ยนไปได้

object Main {
  def main(args: Array[String]): Unit = {
    val words = List("scala", "rocks")
    val lengths = words.map(_.length)
    println(lengths)
  }
}

รูปแบบย่อด้วยอันเดอร์สกอร์

อันเดอร์สกอร์ _ เป็นรูปแบบย่อสำหรับพารามิเตอร์ฟังก์ชันหนึ่งตัว _ * 2 หมายถึง x => x * 2 ช่วยให้การแปลงแบบง่ายกระชับขึ้น

object Main {
  def main(args: Array[String]): Unit = {
    val nums = List(10, 20, 30)
    println(nums.map(_ + 1))
    println(nums.map(x => x + 1))
  }
}

filter: เก็บองค์ประกอบที่ตรงเงื่อนไข

filter จะเก็บเฉพาะองค์ประกอบที่เพรดิเคตคืนค่าเป็น true ผลลัพธ์อาจมีขนาดเล็กลงกว่าต้นฉบับ

object Main {
  def main(args: Array[String]): Unit = {
    val nums = (1 to 10).toList
    val evens = nums.filter(_ % 2 == 0)
    println(evens)
  }
}

filterNot: ตรงกันข้าม

filterNot จะเก็บองค์ประกอบที่เพรดิเคตเป็น false ซึ่งเป็นส่วนเติมเต็มของ filter

object Main {
  def main(args: Array[String]): Unit = {
    val nums = List(1, 2, 3, 4, 5)
    println(nums.filterNot(_ % 2 == 0))
  }
}

flatMap: map แล้วทำให้แบนราบ

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

object Main {
  def main(args: Array[String]): Unit = {
    val words = List("ab", "cd")
    val chars = words.flatMap(_.toList)
    println(chars)
  }
}

map เทียบกับ flatMap

หากฟังก์ชันของคุณคืนคอลเลกชัน map จะให้คอลเลกชันซ้อนกัน ส่วน flatMap จะให้คอลเลกชันแบบแบน เลือกใช้ตามรูปแบบผลลัพธ์ที่ต้องการ

object Main {
  def main(args: Array[String]): Unit = {
    val nums = List(1, 2, 3)
    println(nums.map(n => List(n, n)))
    println(nums.flatMap(n => List(n, n)))
  }
}

flatMap กับ Option

การใช้ flatMap กับลิสต์ของ Option จะทิ้งค่า None และแกะค่า Some ออกมา เป็นวิธีที่สะดวกในการกรองและแปลงข้อมูลพร้อมกัน

object Main {
  def main(args: Array[String]): Unit = {
    val raw = List("1", "x", "3", "y")
    val parsed = raw.flatMap(_.toIntOption)
    println(parsed)
  }
}

collect: กรองและ map พร้อมกัน

collect รับฟังก์ชันบางส่วน โดยจะเก็บและแปลงเฉพาะองค์ประกอบที่ฟังก์ชันกำหนดการทำงานไว้ จึงรวม filter และ map ไว้ในการวนรอบเดียว

object Main {
  def main(args: Array[String]): Unit = {
    val mixed: List[Any] = List(1, "two", 3, "four", 5)
    val ints = mixed.collect { case i: Int => i * 10 }
    println(ints)
  }
}

การเชื่อมโยงการแปลง

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

object Main {
  def main(args: Array[String]): Unit = {
    val result = List(1, 2, 3, 4)
      .map(_ + 1)
      .filter(_ % 2 == 0)
    println(result)
  }
}

กระบวนการที่เป็นระเบียบ

นี่คือตัวอย่างกระบวนการแปลงที่เป็นระเบียบ: กรองตัวเลขคู่ ยกกำลังสอง แล้วเก็บเฉพาะค่าที่มาก กระบวนการลักษณะนี้อ่านได้เหมือนคำอธิบายการไหลของข้อมูล

object Main {
  def main(args: Array[String]): Unit = {
    val result = (1 to 10).toList
      .filter(_ % 2 == 0)
      .map(x => x * x)
      .filter(_ > 10)
    println(result)
  }
}

ตรวจสอบอย่างรวดเร็ว

List("ab", "cd").flatMap(_.toList) คืนค่าอะไร

สรุปทบทวน

คุณได้เรียนรู้การแปลงข้อมูลหลักแล้ว:

  • map — แปลงสมาชิกแต่ละรายการ โดยมีขนาดเท่าเดิม
  • filter / filterNot — เก็บหรือลบรายการตามเงื่อนไข
  • flatMap — แปลงแล้วคลี่ผลลัพธ์ที่ซ้อนกันให้เป็นระดับเดียว
  • collect — กรองและแปลงด้วยฟังก์ชันบางส่วน
  • เชื่อมการทำงานเหล่านี้เป็นกระบวนการต่อเนื่องที่อ่านเข้าใจง่ายและไม่เปลี่ยนแปลงข้อมูลเดิม

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

บทเรียน “การแปลงข้อมูล” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การแปลงข้อมูล” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Scala for Backend Engineering & Functional Programming ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Scala for Backend Engineering & Functional Programming มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การแปลงข้อมูล”

map, filter, flatMap คุณปฏิบัติ Scala for Backend Engineering & Functional Programming ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Scala for Backend Engineering & Functional Programming หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Scala for Backend Engineering & Functional Programming บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “การแปลงข้อมูล” ใช้เวลานานแค่ไหน

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

ฉันเขียนและรันโค้ดในบทเรียน Scala for Backend Engineering & Functional Programming นี้ได้ไหม

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

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

  1. List, Vector, Set, Map
  2. การแปลงข้อมูล
  3. การพับและการลดค่า
  4. การจัดกลุ่มและการเรียงลำดับ
← กลับไปที่ Scala for Backend Engineering & Functional Programming