Pretvaranje popisa u mapu u Kotlinu

1. Uvod

U ovom brzom vodiču vidjet ćemo kako možemo pretvoriti Popis do a Karta jan Kotlin.

2. Provedba

Kotlin nudi povoljno toMap metoda koja će nam, s obzirom na popis složenih objekata, omogućiti da elementi na našem popisu budu mapirani bilo kojim vrijednostima koje pružamo:

val user1 = User ("John", 18, listOf ("Hiking")) val user2 = User ("Sara", 25, listOf ("Chess")) val user3 = User ("Dave", 34, listOf (" Igre ")) @Test zabava givenList_whenConvertToMap_thenResult () {val myList = listOf (user1, user2, user3) val myMap = myList.map {it.name to it.age} .toMap () assertTrue (myMap.get (" John " ) == 18)}

Imajte na umu da "do" Ključna riječ ovdje se koristi za stvaranje parova imena i dobi. Ova metoda trebala bi vratiti mapu koja čuva redoslijed unosa elemenata u polju:

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

Isto bi se dogodilo kada mapiramo manji niz od Niz:

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

Jedina je razlika što ne specificiramo vrijednost za to budući da će se samo time preslikati.

Zatim kao drugu alternativu za pretvorbu a Popis do a Karta je pomoću pridruženiBy metoda:

@Test zabava givenList_whenAssociatedBy_thenResult () {val myList = listOf (user1, user2, user3) val myMap = myList.associateBy ({it.name}, {it.hobbies}) assertTrue (myMap.get ("John") !!. sadrži ("planinarenje"))}

Test smo modificirali tako da koristi vrijednost kao vrijednost:

{John = [Planinarenje, plivanje], Sara = [šah, društvene igre], Dave = [igre, trkački sportovi]}

3. Koji koristiti?

Ako obje metode u osnovi postižu istu funkcionalnost, koju bismo trebali koristiti?

toMap, u smislu implementacije, intuitivniji je. Međutim, korištenje ove metode zahtijeva da transformiramo svoj Polje u Parovi prvo, koje kasnije treba prevesti na naš Karta, tako ova će operacija biti posebno korisna ako već operiramo na zbirkama Parovi.

Za kolekcije drugih vrsta, suradnik API će biti najbolji izbor.

4. Mapiranje pomoću suradnik* Metode

U našem prethodnom primjeru koristili smo suradnikBy metoda, međutim, Kotlin zbirke Paket ima različite verzije za različite slučajeve upotrebe.

4.1. The suradnik() Metoda

Za početak ćemo koristiti suradnik metoda - koja jednostavno vraća a Karta upotrebom funkcije pretvorbe na elementima niza:

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

4.2. The suradnikTo Metoda

Pomoću ove metode možemo prikupiti svoje elemente na već postojeću kartu:

@Test zabava 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")}

Važno je zapamtiti da se koristi promjenjivi Karta - ovaj primjer neće raditi s nepromjenjivim.

4.3. The suradnikByTo Metoda

The suradnikByTo daje nam najviše fleksibilnosti od ove tri jer možemo proći ili kartu koja će se popuniti, a keySelector funkcija. Za svaki navedeni ključ, pridružena vrijednost bit će objekt iz kojeg je ključ izvučen:

@Test zabava givenStringList_whenAssociateByToUser_thenResult () {val myList = listOf (user1, user2, user3, user4) val myMap = mutableMapOf () myList.associateByTo (myMap) {it.name} assertTrue ("DaMve. dob == 34)}

Ili možemo koristiti a valueTransform funkcija:

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

Važno je to upamtiti ako se dogodi sudaranje ključeva, zadržava se samo zadnja dodana vrijednost.

5. Zaključak

U ovom smo članku istražili različite načine pretvaranja a Popis do a Karta u Kotlinu.

Kao i uvijek, implementacija svih ovih primjera i isječaka može se naći na GitHubu.


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