การแปลงข้อมูล
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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ