Mengonversi Daftar ke Peta di Kotlin

1. Perkenalan

Dalam tutorial ini cepat, kita akan melihat bagaimana kita dapat mengkonversi Daftar ke Peta i n Kotlin.

2. Implementasi

Kotlin menawarkan metode toMap yang nyaman, yang diberikan daftar objek kompleks, akan memungkinkan kita untuk memiliki elemen dalam daftar kita yang dipetakan dengan nilai apa pun 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 bahwa kata kunci "kepada" digunakan di sini untuk membuat pasangan nama dan usia. Metode ini harus mengembalikan peta yang mempertahankan urutan entri elemen dalam larik:

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

Hal yang sama akan terjadi ketika kita memetakan array 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 perbedaan adalah bahwa kita tidak menentukan nilai untuk itu karena hanya akan dipetakan dengan itu.

Kemudian sebagai alternatif kedua untuk mengubah Daftar menjadi Peta adalah dengan menggunakan metode terkait

@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 memodifikasi tes sehingga menggunakan array sebagai nilainya:

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

3. Yang Mana yang Akan Digunakan?

Jika kedua metode pada dasarnya mencapai fungsi yang sama, manakah yang harus kita gunakan?

toMap , dalam hal implementasi, lebih intuitif. Namun menggunakan metode ini mengharuskan kita untuk mengubah Array kita menjadi Pairs terlebih dahulu, yang kemudian harus diterjemahkan ke Peta kita , jadi operasi ini akan sangat berguna jika kita sudah mengoperasikan kumpulan Pairs.

Untuk koleksi jenis lainnya, API asosiasi akan menjadi pilihan terbaik.

4. Pemetaan Menggunakan Metode associate *

Dalam contoh kami sebelumnya, kami menggunakan metode associateBy , namun, paket koleksi Kotlin memiliki versi berbeda untuk kasus penggunaan yang berbeda.

4.1. The asosiasi () Method

Kami akan mulai dengan menggunakan metode associate - yang hanya mengembalikan Peta dengan menggunakan fungsi transformasi pada elemen array:

@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 Metode

Dengan menggunakan metode ini, kita dapat mengumpulkan elemen 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 bisa berubah - contoh ini tidak akan berfungsi dengan Peta yang tidak bisa diubah.

4.3. The associateByTo Metode

The associateByTo memberikan kita fleksibilitas yang paling dari tiga karena kita baik bisa lewat peta yang akan diisi, sebuah keySelector fungsi. Untuk setiap kunci yang ditentukan, nilai terkait akan menjadi objek tempat 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 bisa 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 bahwa jika benturan kunci terjadi, hanya nilai tambah terakhir yang dipertahankan.

5. Kesimpulan

Dalam artikel ini, kami menjelajahi berbagai cara untuk mengonversi Daftar menjadi Peta di Kotlin.

Seperti biasa, penerapan semua contoh dan cuplikan ini dapat ditemukan di GitHub.