Prevod zoznamu na mapu v Kotline

1. Úvod

V tomto rýchlom návode uvidíme, ako môžeme previesť súbor Zoznam do a Mapa in Kotlin.

2. Implementácia

Kotlin ponúka pohodlné mapovať metóda, ktorá nám vzhľadom na zoznam zložitých objektov umožní, aby sme mali prvky v našom zozname mapované pomocou akýchkoľvek hodnôt, ktoré poskytneme:

val user1 = User ("John", 18, listOf ("Turistika")) val user2 = User ("Sara", 25, listOf ("Šachy")) val user3 = User ("Dave", 34, listOf (" Hry ")) @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)}

Pamätajte na to „Do“ kľúčové slovo sa tu používa na vytvorenie párov mien a vekov. Táto metóda by mala vrátiť mapu, ktorá zachová poradie vstupu prvkov v poli:

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

To isté by sa stalo, keby sme mapovali menšie pole String:

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

Rozdiel je iba v tom, že neurčujeme hodnotu pre to pretože to bude mapované iba tým.

Potom ako druhú alternatívu previesť a Zoznam do a Mapa je pomocou associatedBy metóda:

@Test fun givenList_whenAssociatedBy_thenResult () {val myList = listOf (user1, user2, user3) val myMap = myList.associateBy ({it.name}, {it.hobbies}) assertTrue (myMap.get ("John") !!. obsahuje („Turistika“))}

Test sme upravili tak, aby ako hodnota používalo pole:

{John = [Turistika, plávanie], Sara = [Šach, spoločenské hry], Dave = [Hry, závodné športy]}

3. Ktorý z nich použiť?

Ak obidve metódy v podstate dosahujú rovnakú funkcionalitu, ktorú by sme mali použiť?

mapovať, čo sa týka implementácie, je intuitívnejšie. Avšak použitie tejto metódy vyžaduje, aby sme transformovali našu Pole do Páry najskôr, ktoré sa neskôr musia preložiť do nášho jazyka Mapa, tak táto operácia bude obzvlášť užitočná, ak už pracujeme na zbierkach súborov Páry.

Pre zbierky iných typov sa spolupracovník API bude najlepšou voľbou.

4. Mapovanie pomocou spolupracovník * Metódy

V našom predchádzajúcom príklade sme použili spolupracovníkBy metóda však Kotlin zbierky balík má rôzne verzie pre rôzne prípady použitia.

4.1. The spolupracovník () Metóda

Začneme používaním spolupracovník metóda - ktorá jednoducho vráti a Mapa pomocou funkcie transformácie na prvkoch poľa:

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

4.2. The spolupracovníkTo Metóda

Pomocou tejto metódy môžeme zhromaždiť naše prvky do už existujúcej mapy:

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

Je dôležité mať na pamäti použitie premenlivého Mapa - tento príklad nebude fungovať s nemenným.

4.3. The associateByTo Metóda

The associateByTo nám dáva najväčšiu flexibilitu z týchto troch, pretože môžeme prejsť buď mapou, ktorá bude osídlená, a keySelector funkcie. Pre každý zadaný kľúč bude pridruženou hodnotou objekt, z ktorého bol kľúč extrahovaný:

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

Alebo môžeme použiť a valueTransform funkcia:

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

Je dôležité si to uvedomiť ak dôjde ku kolízii kľúča, zachová sa iba posledná pridaná hodnota.

5. Záver

V tomto článku sme skúmali rôzne spôsoby premeny a Zoznam do a Mapa v Kotline.

Implementáciu všetkých týchto príkladov a úryvkov ako vždy nájdete na GitHub.


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