Yhdistäminen ja litistäminen
associate ja flatMap
Yhdistäminen ja litistäminen 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.
Map-olioiden muodostaminen ja litistäminen
Kaksi muuta tehokasta kokoelmien työkalua ovat seuraavat: associate-perheen funktiot muodostavat listasta Map-olion, ja flatMap / flatten muuttavat sisäkkäiset kokoelmat yhdeksi litistetyksi kokoelmaksi.
associateWith-funktio
associateWith käyttää jokaista alkiota avaimena ja laskee sen arvon lambdan avulla muodostaen Map-olion.
fun main() {
val words = listOf("a", "bb", "ccc")
val lengths = words.associateWith { it.length }
println(lengths)
}associateBy-funktio
associateBy toimii päinvastoin: se laskee kustakin alkiosta avaimen ja säilyttää alkion arvona.
data class User(val id: Int, val name: String)
fun main() {
val users = listOf(User(1, "Ann"), User(2, "Bob"))
val byId = users.associateBy { it.id }
println(byId[2]?.name)
}associate-funktio
Yleiskäyttöisen associate-funktion avulla voitte muodostaa sekä avaimen että arvon kerralla palauttamalla kullekin alkiolle Pair-parin.
fun main() {
val names = listOf("Ann", "Bob", "Cy")
val map = names.associate { it to it.length }
println(map)
}Duplikaattiavaimet
Jos kaksi alkiota tuottaa saman avaimen associate-funktiossa, jälkimmäinen niistä voittaa. Pitäkää avaimet yksilöllisinä, kun tarvitsette jokaisen alkion mukaan.
fun main() {
val words = listOf("apple", "ant", "bee")
val byFirst = words.associateBy { it.first() }
println(byFirst)
}flatten-funktio
flatten ottaa kokoelmien kokoelman ja yhdistää sen yhdeksi litistetyksi listaksi.
fun main() {
val nested = listOf(listOf(1, 2), listOf(3, 4), listOf(5))
val flat = nested.flatten()
println(flat)
}flatMap-funktio
flatMap muuntaa jokaisen alkion kokoelmaksi ja litistää sitten kaikki nämä kokoelmat yhdeksi listaksi. Se on map- ja flatten-funktioiden yhdistelmä yhdessä vaiheessa.
fun main() {
val words = listOf("hi", "ok")
val chars = words.flatMap { it.toList() }
println(chars)
}flatMap sisäkkäisissä tiedoissa
flatMap sopii erinomaisesti sisäkkäisten rakenteiden laajentamiseen yhdeksi alkioketjuksi.
data class Team(val members: List<String>)
fun main() {
val teams = listOf(Team(listOf("Ann", "Bob")), Team(listOf("Cy")))
val everyone = teams.flatMap { it.members }
println(everyone)
}flatMap verrattuna map-funktioon
Käyttäkää map-funktiota, kun kustakin alkiosta syntyy täsmälleen yksi tulos. Käyttäkää flatMap-funktiota, kun kustakin alkiosta syntyy kokoelma ja haluatte yhdistää kaikki kokoelmat yhdeksi litistetyksi listaksi.
fun main() {
val numbers = listOf(1, 2, 3)
val mapped = numbers.map { listOf(it, it * 10) }
val flat = numbers.flatMap { listOf(it, it * 10) }
println("map: $mapped")
println("flatMap: $flat")
}associate- ja flatMap-funktioiden yhdistäminen
Näitä työkaluja käytetään usein yhdessä tietoputkissa: litistäkää sisäkkäiset tiedot ja muodostakaa niistä sitten hakua varten Map-olio, jotta tiedot voidaan hakea nopeasti.
data class Order(val items: List<String>)
fun main() {
val orders = listOf(Order(listOf("pen", "ink")), Order(listOf("pen")))
val counts = orders.flatMap { it.items }.groupingBy { it }.eachCount()
println(counts)
}Milloin mitäkin käytetään
Valitkaa associateBy- tai associateWith-funktio, kun haluatte muodostaa listasta nopeasti haettavan Map-olion, ja flatMap- tai flatten-funktio, kun haluatte litistää sisäkkäisiä kokoelmia. Ne tekevät rakenteisten tietojen käsittelystä tiivistä ja selkeää.
Pikatarkistus
Mitä flatMap tekee?
Kertaus
Opitte muodostamaan Map-olioita funktioilla associate, associateBy ja associateWith (viimeinen duplikaattiavain voittaa) sekä litistämään sisäkkäisiä rakenteita funktioilla flatten ja flatMap. Näiden avulla kokoelmien työkalupakki transformointiin, järjestämiseen, aggregointiin ja tietojen rakenteen muokkaamiseen on valmis.
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 ”Yhdistäminen ja litistäminen” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Kotlin Academy-oppimispolun 3 oppituntia, myös oppitunnin “Yhdistäminen ja litistäminen”. 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 ”Yhdistäminen ja litistäminen”?
associate ja flatMap 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 ”Yhdistäminen ja litistäminen”-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
- Suodatus ja mappaus
- Ryhmittely ja osiointi
- Aggregointi
- Yhdistäminen ja litistäminen