Kotlin Academy · Oppitunti

Yhdistäminen ja litistäminen

associate ja flatMap

Oppitunti 4/413 vaihetta

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.

Aloita maksutta

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

  1. Suodatus ja mappaus
  2. Ryhmittely ja osiointi
  3. Aggregointi
  4. Yhdistäminen ja litistäminen
← Takaisin: Kotlin Academy