0Pricing
Kotlin Academy · บทเรียน

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

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

  1. map และ flatMap: แปลงสมาชิกทุกตัว
  2. filter, filterNot และ partition
  3. fold, reduce และ runningFold
  4. การเชื่อมต่อไปป์ไลน์และหลีกเลี่ยงลิสต์ชั่วคราวด้วย Sequence
← กลับไปที่ Kotlin Academy