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.