Menukar Senarai ke Peta di Kotlin

1. Pengenalan

Dalam tutorial ringkas ini, kita akan melihat bagaimana kita dapat mengubah Daftar menjadi Peta i n Kotlin.

2. Pelaksanaan

Kotlin menawarkan kaedah toMap yang mudah yang, dengan memberikan senarai objek kompleks, akan membolehkan kita mempunyai elemen dalam senarai kita yang dipetakan dengan nilai yang kita berikan:

val user1 = User("John", 18, listOf("Hiking")) val user2 = User("Sara", 25, listOf("Chess")) val user3 = User("Dave", 34, listOf("Games")) @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) }

Perlu diingat bahawa kata kunci "to" digunakan di sini untuk membuat pasangan nama dan umur. Kaedah ini harus mengembalikan peta yang mengekalkan susunan kemasukan elemen dalam array:

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

Perkara yang sama akan berlaku ketika kita memetakan susunan String yang lebih kecil :

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

Satu-satunya perbezaan adalah bahawa kita tidak menentukan nilai untuk ia kerana ia akan hanya dapat dipetakan oleh itu.

Kemudian sebagai alternatif kedua untuk menukar Daftar ke Peta adalah dengan menggunakan kaedah yang berkaitan dengan :

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

Kami mengubah suai ujian sehingga menggunakan array sebagai nilai:

{ John=[Hiking, Swimming], Sara=[Chess, Board Games], Dave=[Games, Racing sports] }

3. Yang Mana Digunakan?

Sekiranya kedua-dua kaedah pada dasarnya mencapai fungsi yang sama, mana yang harus kita gunakan?

toMap , dari segi pelaksanaan, lebih intuitif. Namun menggunakan kaedah ini memerlukan kita mengubah Array kita menjadi Pasangan terlebih dahulu, yang kemudiannya harus diterjemahkan ke Peta kita , jadi operasi ini akan sangat berguna jika kita sudah beroperasi pada koleksi Pasangan.

Untuk koleksi jenis lain, API bersekutu akan menjadi pilihan terbaik.

4. Pemetaan Menggunakan Kaedah bersekutu *

Dalam contoh kami sebelum ini, kami menggunakan associateBy kaedah, bagaimanapun, Kotlin koleksi pakej mempunyai versi yang berbeza untuk menggunakan kes-kes yang berbeza.

4.1. Yang bersekutu () Menghubungi

Kita akan mulakan dengan menggunakan kaedah bersekutu - yang hanya mengembalikan Peta dengan menggunakan fungsi transformasi pada elemen larik:

@Test fun 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 associateTo Menghubungi

Dengan menggunakan kaedah ini, kita dapat mengumpulkan unsur-unsur kita ke peta yang sudah ada:

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

Penting untuk diingat untuk menggunakan Peta yang boleh diubah - contoh ini tidak akan berfungsi dengan yang tidak berubah.

4.3. The associateByTo Menghubungi

The associateByTo memberikan kita fleksibiliti sebahagian besar tiga kerana kita sama ada boleh lulus peta yang akan diisi, yang keySelector fungsi. Untuk setiap kunci yang ditentukan, nilai yang berkaitan akan menjadi objek di mana kunci diekstrak dari:

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

Atau kita boleh menggunakan fungsi valueTransform :

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

Penting untuk diingat bahawa jika perlanggaran utama berlaku, hanya nilai tambah terakhir yang akan dipertahankan.

5. Kesimpulan

Dalam artikel ini, kami meneroka pelbagai cara untuk menukar Senarai ke Peta di Kotlin.

Seperti biasa, pelaksanaan semua contoh dan potongan ini boleh didapati di GitHub.