Lista konvertálása térképre Kotlinban

1. Bemutatkozás

Ebben a gyors bemutatóban meglátjuk, hogyan alakíthatjuk át a Lista a Térkép énn Kotlin.

2. Végrehajtás

Kotlin kínálja a kényelmes térképre módszer, amely egy összetett objektumok listája alapján lehetővé teszi számunkra, hogy a listánk elemei feltérképezhetők legyenek bármely általunk megadott értékkel:

val user1 = Felhasználó ("John", 18, listOf ("Túrázás")) val user2 = Felhasználó ("Sara", 25, listOf ("Sakk")) val user3 = Felhasználó ("Dave", 34, listOf (" Játékok ")) @Test fun givenList_whenConvertToMap_thenResult () {val myList = listOf (user1, user2, user3) val myMap = myList.map {it.name it.age} .toMap () assertTrue (myMap.get (" John " ) == 18)}

Tartsd észben, hogy "nak nek" kulcsszót használnak itt név- és életkor-párok létrehozására. Ennek a metódusnak vissza kell adnia egy olyan térképet, amely megőrzi a tömb elemeinek belépési sorrendjét:

{János = 18, Sara = 25, Dave = 34}

Ugyanez történne, ha egy kisebb tömböt feltérképezünk Húr:

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

Az egyetlen különbség az, hogy nem adjuk meg az értékét azt mivel csak az fogja feltérképezni.

Ezután második alternatívaként a Lista a Térkép a társítottBy módszer:

@Test fun givenList_whenAssociatedBy_thenResult () {val myList = listOf (user1, user2, user3) val myMap = myList.associateBy ({it.name}, {it.hobbies}) assertTrue (myMap.get ("John") !!. tartalmazza ("túrázás"))}}

Módosítottuk a tesztet úgy, hogy tömböt használjon értékként:

{John = [túrázás, úszás], Sara = [sakk, társasjáték], Dave = [játék, versenysport]}

3. Melyiket kell használni?

Ha mindkét módszer lényegében ugyanazt a funkcionalitást éri el, melyiket használjuk?

térképre, a megvalósítás szempontjából intuitívabb. Ennek a módszernek az alkalmazása azonban megköveteli, hogy átalakítsuk a sajátjainkat Sor -ba Párok először, amelyeket később le kell fordítani a mi nyelvünkre Térkép, így ez a művelet különösen hasznos lesz, ha már a Párok.

Más típusú gyűjtemények esetében a munkatárs Az API lesz a legjobb választás.

4. Térképezés használatával munkatárs* Mód

Előző példánkban a társultBy módszer azonban Kotlin gyűjtemények A csomagnak különböző verziói vannak a különböző felhasználási esetekhez.

4.1. A munkatárs() Módszer

Kezdjük a munkatárs módszer - amely egyszerűen a Térkép a transzformációs függvény használatával a tömb elemein:

@Teszt móka adottStringList_whenAssociate_thenResult () {val myList = listOf ("a", "b", "c", "d") val myMap = myList.associate {it to it} assertTrue (myMap.get ("a") = = "a")}

4.2. A AssociateTo Módszer

Ezzel a módszerrel elemeket gyűjthetünk egy már létező térképre:

@Tesztelt móka adottStringList_whenAssociateTo_thenResult () {val myList = listOf ("a", "b", "c", "c", "b") val myMap = mutableMapOf () myList.associateTo (myMap) {it to it} assertTrue (myMap.get ("a") == "a")}

Fontos megjegyezni, hogy a változtathatót kell használni Térkép - ez a példa nem fog működni egy változhatatlannal.

4.3. A associateByTo Módszer

A associateByTo megadja számunkra a legtöbb rugalmasságot a három közül, mivel vagy átadhatjuk a feltöltött térképet, a keySelector funkció. Minden egyes megadott kulcshoz a társított érték lesz az az objektum, ahonnan a kulcs kinyert:

@Test fun megadottStringList_whenAssociateByToUser_thenResult () {val myList = listOf (user1, user2, user3, user4) val myMap = mutableMapOf () myList.associateByTo (myMap) {it.name} assertTrue (myMap.get (myMap.get) életkor == 34)}

Vagy használhatjuk a valueTransform funkció:

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

Fontos erre emlékezni ha kulcsütközések történnek, akkor csak az utolsó hozzáadott érték marad meg.

5. Következtetés

Ebben a cikkben a konverzió különböző módjait tártuk fel Lista a Térkép Kotlinban.

Mint mindig, ezeknek a példáknak és kivonatoknak a megvalósítása megtalálható a GitHubon.


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