Een lijst omzetten in kaart in Kotlin

1. Inleiding

In deze korte tutorial zullen we zien hoe we een Lijst naar een Kaart ikn Kotlin.

2. Implementatie

Kotlin biedt het gemak in kaart brengen methode die, gegeven een lijst met complexe objecten, ons in staat zal stellen om elementen in onze lijst in kaart te brengen door alle waarden die we leveren:

val user1 = Gebruiker ("Jan", 18, listOf ("Wandelen")) val user2 = Gebruiker ("Sara", 25, listOf ("Schaken")) val user3 = Gebruiker ("Dave", 34, listOf (" Games ")) @Test fun givenList_whenConvertToMap_thenResult () {val myList = listOf (user1, user2, user3) val myMap = myList.map {it.name to it.age} .toMap () assertTrue (myMap.get (" John " ) == 18)}

Houd daar rekening mee "naar" trefwoord wordt hier gebruikt om paren namen en leeftijden te creëren. Deze methode zou een kaart moeten retourneren die de invoervolgorde van de elementen in de array behoudt:

{John = 18, Sara = 25, Dave = 34}

Hetzelfde zou gebeuren als we een kleinere reeks Draad:

@Test plezier gegevenStringList_whenConvertToMap_thenResult () {val myList = listOf ("a", "b", "c") val myMap = myList.map {ernaar toe} .toMap () assertTrue (myMap.get ("a") = = "a")}

Het enige verschil is dat we de waarde voor niet specificeren het omdat het alleen daardoor in kaart wordt gebracht.

Dan als tweede alternatief om een Lijst naar een Kaart is door de geassocieerdBy methode:

@Test plezier gegevenList_whenAssociatedBy_thenResult () {val myList = listOf (gebruiker1, gebruiker2, gebruiker3) val myMap = myList.associateBy ({it.name}, {it.hobbies}) assertTrue (myMap.get ("John") !!. bevat ("Wandelen"))}

We hebben de test aangepast zodat deze een array als waarde gebruikt:

{John = [wandelen, zwemmen], Sara = [schaken, bordspellen], Dave = [games, racesport]}

3. Welke te gebruiken?

Als beide methoden in wezen dezelfde functionaliteit bereiken, welke moeten we dan gebruiken?

in kaart brengen, in termen van implementatie, is meer intuïtief. Het gebruik van deze methode vereist echter dat we onze Array in Paren eerst, die later naar ons moeten worden vertaald Kaart, dus deze bewerking is vooral handig als we al bezig zijn met verzamelingen van Paren.

Voor verzamelingen van andere typen, de associëren API is de beste keuze.

4. In kaart brengen met associëren* Methoden

In ons vorige voorbeeld hebben we de associateBy methode echter, Kotlin collecties pakket heeft verschillende versies voor verschillende gebruikssituaties.

4.1. De associëren() Methode

We beginnen met het gebruik van de associëren methode - die gewoon een Kaart door een transformatiefunctie te gebruiken op de elementen van de array:

@Test plezier gegevenStringList_whenAssociate_thenResult () {val myList = listOf ("a", "b", "c", "d") val myMap = myList.associate {it to it} assertTrue (myMap.get ("a") = = "a")}

4.2. De associateTo Methode

Met behulp van deze methode kunnen we onze elementen verzamelen op een reeds bestaande kaart:

@Test plezier gegevenStringList_whenAssociateTo_thenResult () {val myList = listOf ("a", "b", "c", "c", "b") val myMap = mutableMapOf () myList.associateTo (myMap) {it to it} assertTrue (myMap.get ("a") == "a")}

Het is belangrijk om te onthouden om de mutable te gebruiken Kaart - dit voorbeeld zal niet werken met een onveranderlijk exemplaar.

4.3. De associateByTo Methode

De associateByTo geeft ons de meeste flexibiliteit van de drie omdat we ofwel de kaart kunnen passeren die zal worden bevolkt, a keySelector functie. Voor elke opgegeven sleutel is de bijbehorende waarde het object waaruit de sleutel is geëxtraheerd:

@Test plezier gegevenStringList_whenAssociateByToUser_thenResult () {val myList = listOf (gebruiker1, gebruiker2, gebruiker3, gebruiker4) val myMap = mutableMapOf () myList.associateByTo (myMap) {it.name} assertTrue ("Dave"). !!. leeftijd == 34)}

Of we kunnen een valueTransform functie:

@Test plezier gegevenStringList_whenAssociateByTo_thenResult () {val myList = listOf (user1, user2, user3, user4) val myMap = mutableMapOf () myList.associateByTo (myMap, {it.name}, {it.get}) assMapTrue ( "Dave") == 34)}

Het is belangrijk om dat te onthouden als er sleutelbotsingen plaatsvinden, blijft alleen de laatste toegevoegde waarde behouden.

5. Conclusie

In dit artikel hebben we verschillende manieren onderzocht om een Lijst naar een Kaart in Kotlin.

Zoals altijd is de implementatie van al deze voorbeelden en fragmenten te vinden op GitHub.