map และ flatMap: แปลงสมาชิกทุกตัว
แปลงคอลเลกชันด้วย map และคลี่ผลลัพธ์ที่ซ้อนกันด้วย flatMap
map และ flatMap: แปลงสมาชิกทุกตัว เป็นบทเรียน Kotlin Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Kotlin Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Kotlin Academy มีบทเรียนทั้งหมด 4 บทเรียน
พื้นฐานการแปลงข้อมูล
map ใช้ฟังก์ชันกับสมาชิกแต่ละตัว แล้วคืนคอลเลกชันใหม่ที่มีขนาดเท่าเดิม ส่วน flatMap ทำเช่นเดียวกัน แต่จะแผ่รายการซ้อนรายการให้เป็นรายการเดียว
การแปลงพื้นฐาน
แปลงสมาชิกแต่ละตัวด้วยแลมบ์ดา โดยผลลัพธ์จะมีขนาดเท่ากับข้อมูลเข้า
fun main() {
val nums = listOf(1, 2, 3, 4)
val squares = nums.map { it * it }
println(squares) // [1, 4, 9, 16]
}การแปลงที่เปลี่ยนชนิดข้อมูล
ชนิดข้อมูลของสมาชิกผลลัพธ์อาจแตกต่างจากข้อมูลเข้าได้ — List<Int> สามารถกลายเป็น List<String> ได้
fun main() {
val nums = listOf(1, 2, 3)
val labels = nums.map { "Item $it" }
println(labels)
}การแปลงคลาสข้อมูล
ดึงพร็อพเพอร์ตีออกจากสมาชิกแต่ละตัว — เปลี่ยนคลาสข้อมูลให้เป็นชนิดข้อมูลที่เรียบง่ายขึ้น
data class User(val name: String, val age: Int)
fun main() {
val users = listOf(User("Ada", 35), User("Ben", 22))
val names = users.map { it.name }
println(names) // [Ada, Ben]
}การเรียกการแปลงต่อกัน
การเรียก map หลายครั้งประกอบเข้าด้วยกันได้อย่างราบรื่น — แต่ละครั้งจะแปลงผลลัพธ์จากครั้งก่อน
fun main() {
val nums = listOf(1, 2, 3)
val result = nums.map { it + 1 }.map { it * 10 }
println(result) // [20, 30, 40]
}การแผ่รายการพื้นฐาน
flatMap เรียกฟังก์ชันที่คืนรายการสำหรับสมาชิกแต่ละตัว จากนั้นจะแผ่ผลลัพธ์ทั้งหมดให้เป็นรายการเดียว
fun main() {
val words = listOf("hello", "world")
val chars = words.flatMap { it.toList() }
println(chars) // [h, e, l, l, o, w, o, r, l, d]
}ควรใช้ flatMap เมื่อใด
ใช้ flatMap เมื่อแลมบ์ดาสร้างรายการโดยธรรมชาติ และคุณต้องการผลลัพธ์แบบรายการเดียวแทนรายการซ้อนรายการ
data class Order(val items: List<String>)
fun main() {
val orders = listOf(
Order(listOf("pen", "book")),
Order(listOf("lamp")),
Order(listOf("mug", "ring"))
)
val allItems = orders.flatMap { it.items }
println(allItems) // [pen, book, lamp, mug, ring]
}map ของรายการเทียบกับ flatMap
เปรียบเทียบชนิดของผลลัพธ์ — map จะคงการซ้อนรายการไว้ ส่วน flatMap จะนำการซ้อนออก
fun main() {
val nums = listOf(1, 2, 3)
val mapped = nums.map { listOf(it, it * 10) }
val flat = nums.flatMap { listOf(it, it * 10) }
println(mapped) // [[1, 10], [2, 20], [3, 30]]
println(flat) // [1, 10, 2, 20, 3, 30]
}flatMap กับรายการตามเงื่อนไข
คืนรายการว่างสำหรับสมาชิกที่ต้องการตัดออก — flatMap จะกรองและแปลงข้อมูลในขั้นตอนเดียว
fun main() {
val nums = listOf(1, 2, 3, 4, 5)
val doubled = nums.flatMap { if (it % 2 == 0) listOf(it, it * 2) else emptyList() }
println(doubled) // [2, 4, 4, 8]
}การแปลงพร้อมดัชนี
mapIndexed ส่งทั้งดัชนีและค่าให้แลมบ์ดา
fun main() {
val fruits = listOf("apple", "banana", "cherry")
val labeled = fruits.mapIndexed { i, name -> "$i: $name" }
println(labeled)
}ลำดับเทียบกับรายการ
สำหรับการดำเนินการต่อกันที่ยาวมาก ให้แปลงเป็น Sequence ก่อน เพื่อหลีกเลี่ยงการสร้างรายการระหว่างทาง
fun main() {
val big = (1..100).asSequence()
.map { it + 1 }
.filter { it % 5 == 0 }
.map { it * 2 }
.toList()
println(big.take(5)) // first 5 results
}ตรวจสอบความเข้าใจอย่างรวดเร็ว
ความแตกต่างสำคัญระหว่าง map กับ flatMap คืออะไร
สรุปทบทวน
การแปลง จะแปลงสมาชิกแต่ละตัว (มีขนาดเท่าเดิม แต่อาจเป็นชนิดใหม่) การแผ่รายการ จะใช้ฟังก์ชันที่คืนรายการ แล้วนำผลลัพธ์ทั้งหมดมาต่อกัน ใช้ร่วมกับ mapIndexed เพื่อเข้าถึงดัชนี และเปลี่ยนเป็น Sequence สำหรับสายการประมวลผลแบบประเมินเมื่อจำเป็นที่ยาว
คำถามที่พบบ่อย
บทเรียน “map และ flatMap: แปลงสมาชิกทุกตัว” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “map และ flatMap: แปลงสมาชิกทุกตัว” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Kotlin Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Kotlin Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “map และ flatMap: แปลงสมาชิกทุกตัว”
แปลงคอลเลกชันด้วย map และคลี่ผลลัพธ์ที่ซ้อนกันด้วย flatMap คุณปฏิบัติ Kotlin Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Kotlin Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Kotlin Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “map และ flatMap: แปลงสมาชิกทุกตัว” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Kotlin Academy นี้ได้ไหม
ได้ บทเรียน Kotlin Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- map และ flatMap: แปลงสมาชิกทุกตัว
- filter, filterNot และ partition
- fold, reduce และ runningFold
- การเชื่อมต่อไปป์ไลน์และหลีกเลี่ยงลิสต์ชั่วคราวด้วย Sequence