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

filter, map และ find บนคอลเลกชัน

ใช้ lambda เพื่อแปลงและกรองคอลเลกชันด้วยฟังก์ชันจากไลบรารีมาตรฐาน

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

สามฟังก์ชันหลักที่ใช้บ่อย

การกรองจะเก็บสมาชิกที่ตรงกับเพรดิเคต การแปลงจะแปลงสมาชิกแต่ละตัว การค้นหาจะคืนค่าสมาชิกตัวแรกที่ตรงเงื่อนไข หรือคืนค่าว่าง ทั้งสามฟังก์ชันครอบคลุมการประมวลผลคอลเลกชันส่วนใหญ่

พื้นฐานการกรอง

filter คืนค่ารายการใหม่ที่มีเฉพาะสมาชิกซึ่งเพรดิเคตคืนค่าเป็นจริง

fun main() {
    val nums = listOf(1, 2, 3, 4, 5, 6)
    val evens = nums.filter { it % 2 == 0 }
    println(evens) // [2, 4, 6]
}

พื้นฐานการแปลง

map คืนค่ารายการใหม่ที่มีขนาดเท่าเดิม โดยแลมบ์ดาจะแปลงสมาชิกแต่ละตัว

fun main() {
    val nums = listOf(1, 2, 3)
    val squares = nums.map { it * it }
    println(squares) // [1, 4, 9]
}

พื้นฐานการค้นหา

find คืนค่าสมาชิกตัวแรกที่ตรงกับเพรดิเคต หรือคืนค่าว่างหากไม่มีสมาชิกที่ตรงเงื่อนไข

fun main() {
    val words = listOf("apple", "banana", "cherry")
    val match = words.find { it.startsWith("b") }
    println(match) // banana
}

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

ใช้ไวยากรณ์จุดเพื่อรวมทั้งสองการดำเนินการและสร้างสายการประมวลผลที่สื่อความหมายได้ชัดเจน

fun main() {
    val nums = listOf(1, 2, 3, 4, 5)
    val result = nums.filter { it % 2 == 1 }.map { it * 10 }
    println(result) // [10, 30, 50]
}

การกรองคลาสข้อมูล

การกรองและการแปลงทำงานได้อย่างโดดเด่นกับคอลเลกชันของอินสแตนซ์คลาสข้อมูล

data class User(val name: String, val age: Int)
fun main() {
    val users = listOf(User("Ana", 17), User("Ben", 25), User("Cal", 31))
    val adultNames = users.filter { it.age >= 18 }.map { it.name }
    println(adultNames) // [Ben, Cal]
}

การค้นหาเทียบกับสมาชิกแรก

find คืนค่าที่อาจเป็นค่าว่าง ส่วน first { ... } จะโยนข้อผิดพลาดหากไม่พบสมาชิก ใช้ find เมื่อต้องการผลลัพธ์ที่อาจมีหรือไม่มีก็ได้

fun main() {
    val nums = listOf(1, 2, 3)
    println(nums.find { it > 10 })  // null
    // nums.first { it > 10 }       // throws NoSuchElementException
    println(nums.firstOrNull { it > 10 }) // null (alias of find)
}

filterNot และ filterNotNull

filterNot จะกลับเงื่อนไขของเพรดิเคต ส่วน filterNotNull จะลบรายการที่เป็นค่าว่างออกจากรายการที่สมาชิกอาจเป็นค่าว่างได้

fun main() {
    val nums = listOf(1, 2, 3, 4)
    println(nums.filterNot { it % 2 == 0 }) // [1, 3]
    val maybe: List<String?> = listOf("a", null, "b", null, "c")
    println(maybe.filterNotNull()) // [a, b, c]
}

mapNotNull

mapNotNull จะแปลงข้อมูลแล้วลบค่าที่เป็นค่าว่างออก เหมาะสำหรับการแยกวิเคราะห์ข้อมูล

fun main() {
    val raw = listOf("1", "two", "3", "four")
    val numbers = raw.mapNotNull { it.toIntOrNull() }
    println(numbers) // [1, 3]
}

สายการประมวลผลในสถานการณ์จริง

ตัวอย่างขนาดเล็กที่รวมการกรอง การแปลง และการลดค่าขั้นสุดท้ายเข้าด้วยกัน

data class Product(val name: String, val price: Double, val inStock: Boolean)
fun main() {
    val products = listOf(
        Product("Pen", 1.0, true),
        Product("Book", 12.0, false),
        Product("Lamp", 25.0, true)
    )
    val total = products
        .filter { it.inStock }
        .map { it.price }
        .sum()
    println("Available total: $total") // 26.0
}

การเลือกใช้การดำเนินการ

ใช้ การกรอง เมื่อต้องการส่วนย่อยของข้อมูล ใช้ การแปลง เมื่อต้องการแปลงข้อมูล ใช้ การค้นหา เมื่อต้องการผลลัพธ์เดียวที่อาจมีหรือไม่มีก็ได้ และเชื่อมการดำเนินการเหล่านี้เมื่อจำเป็น

fun main() {
    val words = listOf("alpha", "beta", "gamma", "delta")
    println(words.filter { it.length == 5 })       // [alpha, gamma, delta]
    println(words.map { it.uppercase() })           // [ALPHA, BETA, GAMMA, DELTA]
    println(words.find { it.endsWith("ta") })       // beta
}

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

ฟังก์ชันใดคืนค่าคอลเลกชันใหม่ที่สมาชิกถูกแปลงด้วยแลมบ์ดา

สรุปทบทวน

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

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

บทเรียน “filter, map และ find บนคอลเลกชัน” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “filter, map และ find บนคอลเลกชัน”

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

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

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

บทเรียน “filter, map และ find บนคอลเลกชัน” ใช้เวลานานแค่ไหน

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

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

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

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

  1. Lambda คืออะไร ไวยากรณ์และชนิด
  2. ส่ง Lambda ให้ฟังก์ชัน
  3. it: พารามิเตอร์โดยนัย
  4. filter, map และ find บนคอลเลกชัน
← กลับไปที่ Kotlin Academy