Konvertering af en liste til kort i Kotlin

1. Introduktion

I denne hurtige vejledning ser vi, hvordan vi kan konvertere en Liste til en Kort jegn Kotlin.

2. Implementering

Kotlin tilbyder det bekvemme at kortlægge metode, der, givet en liste over komplekse objekter, giver os mulighed for at kortlægge elementer i vores liste af de værdier, vi giver:

val bruger1 = Bruger ("John", 18, listOf ("Vandring")) val bruger2 = Bruger ("Sara", 25, listOf ("Chess")) val user3 = Bruger ("Dave", 34, listOf (" Spil ")) @ Test sjov givenList_whenConvertToMap_thenResult () {val myList = listOf (user1, user2, user3) val myMap = myList.map {it.name to it.age} .toMap () assertTrue (myMap.get (" John " ) == 18)}

Husk det "til" nøgleord bruges her til at oprette par med navne og aldre. Denne metode skal returnere et kort, der bevarer indgangsrækkefølgen for elementerne i arrayet:

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

Det samme ville ske, når vi kortlægger et mindre udvalg af Snor:

@Test sjov givenStringList_whenConvertToMap_thenResult () {val myList = listOf ("a", "b", "c") val myMap = myList.map {it to it} .toMap () assertTrue (myMap.get ("a") = = "a")}

Den eneste forskel er, at vi ikke angiver værdien for det da det kun vil blive kortlagt af det.

Derefter som et andet alternativ til at konvertere en Liste til en Kort er ved hjælp af associeret af metode:

@Test sjov givenList_whenAssociatedBy_thenResult () {val myList = listOf (user1, user2, user3) val myMap = myList.associateBy ({it.name}, {it.hobbies}) assertTrue (myMap.get ("John") !!. indeholder ("Vandring"))}

Vi ændrede testen, så den bruger en matrix som værdien:

{John = [Vandring, Svømning], Sara = [Skak, Brætspil], Dave = [Spil, Racersport]}

3. Hvilken skal du bruge?

Hvis begge metoder i det væsentlige opnår den samme funktionalitet, hvilken skal vi bruge?

at kortlægge, med hensyn til implementering, er mere intuitivt. Brug af denne metode kræver imidlertid, at vi transformerer vores Array ind i Par først, som senere skal oversættes til vores Kort, så denne operation vil være særlig nyttig, hvis vi allerede arbejder på samlinger af Par.

For samlinger af andre typer, knytte API er det bedste valg.

4. Kortlægning ved hjælp medarbejder * Metoder

I vores tidligere eksempel brugte vi associateBy metode, dog Kotlin samlinger pakken har forskellige versioner til forskellige brugssager.

4.1. Det tilknytte () Metode

Vi starter med at bruge knytte metode - som simpelthen returnerer en Kort ved at bruge en transformeringsfunktion på elementerne i arrayet:

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

4.2. Det associateTo Metode

Ved hjælp af denne metode kan vi samle vores elementer til et allerede eksisterende kort:

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

Det er vigtigt at huske at bruge den mutable Kort - dette eksempel fungerer ikke med en uforanderlig.

4.3. Det associateByTo Metode

Det associateByTo giver os mest fleksibilitet af de tre, da vi enten kan passere det kort, der skal udfyldes, a keySelector fungere. For hver specificeret nøgle er den tilknyttede værdi det objekt, hvor nøglen blev uddraget fra:

@Test sjov givenStringList_whenAssociateByToUser_thenResult () {val myList = listOf (user1, user2, user3, user4) val myMap = mutableMapOf () myList.associateByTo (myMap) {it.name} assertTrue (myMave.get. !! !!) alder == 34)}

Eller vi kan bruge en valueTransform fungere:

@Test sjov givenStringList_whenAssociateByTo_thenResult () {val myList = listOf (user1, user2, user3, user4) val myMap = mutableMapOf () myList.associateByTo (myMap, {it.name}, {it.age}) assertTrue (my "Dave") == 34)}

Det er vigtigt at huske det hvis der sker nøglekollisioner, bevares kun den sidste merværdi.

5. Konklusion

I denne artikel undersøgte vi forskellige måder at konvertere en Liste til en Kort i Kotlin.

Som altid kan implementeringen af ​​alle disse eksempler og uddrag findes på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found