filter, map ja find kokoelmilla
Soveltakaa lambdoja kokoelmien muuntamiseen ja suodattamiseen standardikirjaston funktioilla.
filter, map ja find kokoelmilla on ilmainen Kotlin Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Kotlin Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Kotlin Academy-kurssilla on yhteensä 4 oppituntia.
Kolme tärkeintä funktiota
filter säilyttää predikaattia vastaavat alkiot. map muuntaa jokaisen alkion. find palauttaa ensimmäisen vastaavan alkion (tai null). Yhdessä ne kattavat suurimman osan kokoelmien käsittelystä.
filter-funktion perusteet
filter palauttaa uuden listan, joka sisältää vain alkiot, joille predikaatti on true.
fun main() {
val nums = listOf(1, 2, 3, 4, 5, 6)
val evens = nums.filter { it % 2 == 0 }
println(evens) // [2, 4, 6]
}map-funktion perusteet
map palauttaa samankokoisen uuden listan, jossa lambda muuntaa jokaisen alkion.
fun main() {
val nums = listOf(1, 2, 3)
val squares = nums.map { it * it }
println(squares) // [1, 4, 9]
}find-funktion perusteet
find palauttaa predikaattia vastaavan ensimmäisen alkion tai null, jos yhtään vastaavaa alkiota ei ole.
fun main() {
val words = listOf("apple", "banana", "cherry")
val match = words.find { it.startsWith("b") }
println(match) // banana
}filter- ja map-funktioiden ketjuttaminen
Yhdistämällä ne piste-erotuksella voitte muodostaa ilmaisuvoimaisia tietoputkia.
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]
}Dataclass-olioiden suodattaminen
filter ja map ovat erityisen hyödyllisiä data class -instansseja sisältävien kokoelmien kanssa.
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 verrattuna first-funktioon
find palauttaa nullable-arvon, kun taas first { ... } heittää poikkeuksen, jos vastaavaa alkiota ei löydy. Käyttäkää find-funktiota, kun vastaavuus voi puuttua.
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 ja filterNotNull
filterNot kääntää predikaatin ehdon päinvastaiseksi. filterNotNull poistaa null-alkiot nullable-arvoja sisältävästä listasta.
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 muuntaa alkiot ja poistaa sitten null-arvot — se on kätevä jäsentämisessä.
fun main() {
val raw = listOf("1", "two", "3", "four")
val numbers = raw.mapNotNull { it.toIntOrNull() }
println(numbers) // [1, 3]
}Käytännön tietoputki
Pieni esimerkki, jossa yhdistetään filter, map ja lopullinen redusointi.
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
}Operaation valitseminen
Käyttäkää filter-funktiota, kun haluatte osajoukon, map-funktiota muuntamiseen ja find-funktiota yhteen valinnaiseen vastaavuuteen. Ketjuttakaa niitä tarpeen mukaan.
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
}Pikakoe
Mikä funktio palauttaa uuden kokoelman, jonka alkiot lambda on muuntanut?
Kertaus
filter valitsee, map muuntaa ja find etsii ensimmäisen vastaavan alkion (tai null). Yhdistelkää niitä vapaasti tietoputkissa. Käyttäkää mapNotNull- ja filterNotNull-funktioita, kun käsittelette valinnaisia arvoja.
Opi Kotlin tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 51
- Oppitunnit
- 203
Usein kysytyt kysymykset
Onko oppitunti ”filter, map ja find kokoelmilla” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Kotlin Academy-oppimispolun 3 oppituntia, myös oppitunnin “filter, map ja find kokoelmilla”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Kotlin Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”filter, map ja find kokoelmilla”?
Soveltakaa lambdoja kokoelmien muuntamiseen ja suodattamiseen standardikirjaston funktioilla. Harjoittelet Kotlin Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Kotlin Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Kotlin Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.
Kuinka kauan ”filter, map ja find kokoelmilla”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Kotlin Academy-oppitunnilla?
Kyllä. Jokainen Kotlin Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Mikä lambda on? Syntaksi ja tyypit
- Lambda-funktioiden välittäminen funktioille
- it: implisiittinen parametri
- filter, map ja find kokoelmilla