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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- Lambda คืออะไร ไวยากรณ์และชนิด
- ส่ง Lambda ให้ฟังก์ชัน
- it: พารามิเตอร์โดยนัย
- filter, map และ find บนคอลเลกชัน