परिचय
Kotlin List को Map में बदलने के कई तरीके प्रदान करता है। यह डेटा ट्रांसफॉर्मेशन के लिए आम है।
डेटा क्लास परिभाषा
data class Subject(
val name: String,
val priority: String
)
विधि 1: associate()
सबसे मानक तरीका - प्रत्येक तत्व से कुंजी-मान जोड़ी बनाता है।
fun main() {
val subjects = listOf(
Subject("Java", "1"),
Subject("Kotlin", "2"),
Subject("C", "3")
)
// priority को key, name को value बनाएं
val map = subjects.associate { Pair(it.priority, it.name) }
// या संक्षिप्त सिंटैक्स
val map2 = subjects.associate { it.priority to it.name }
println(map) // {1=Java, 2=Kotlin, 3=C}
println(map2) // {1=Java, 2=Kotlin, 3=C}
}
विधि 2: associateBy()
कुंजी सेलेक्टर और वैल्यू सेलेक्टर अलग-अलग लेता है।
fun main() {
val subjects = listOf(
Subject("Java", "1"),
Subject("Kotlin", "2"),
Subject("C", "3")
)
val map = subjects.associateBy(
{ it.priority }, // keySelector
{ it.name } // valueTransform
)
println(map) // {1=Java, 2=Kotlin, 3=C}
}
विधि 3: toMap() के साथ map()
fun main() {
val subjects = listOf(
Subject("Java", "1"),
Subject("Kotlin", "2"),
Subject("C", "3")
)
val map = subjects.map { it.priority to it.name }.toMap()
println(map) // {1=Java, 2=Kotlin, 3=C}
}
डुप्लीकेट कुंजियों को संभालना
fun main() {
val subjects = listOf(
Subject("Java", "1"),
Subject("Kotlin", "1"), // डुप्लीकेट कुंजी!
Subject("C", "3")
)
// associate/associateBy - अंतिम मान जीतता है
val map1 = subjects.associateBy({ it.priority }, { it.name })
println("associateBy: $map1") // {1=Kotlin, 3=C}
// associateWith - कुंजी के लिए पहला मान रखता है (कुंजियों की सूची दी गई है)
val keys = listOf("1", "2", "3")
val map2 = keys.associateWith { key ->
subjects.firstOrNull { it.priority == key }?.name ?: "नहीं मिला"
}
println("associateWith: $map2") // {1=Java, 2=Kotlin, 3=C}
// डुप्लीकेट्स को सूची में समूहित करने के लिए groupBy
val grouped = subjects.groupBy { it.priority }
println("groupBy: $grouped") // {1=[Java, Kotlin], 3=[C]}
}
उन्नत: कस्टम मैप टाइप (LinkedHashMap, TreeMap)
fun main() {
val subjects = listOf(Subject("Java", "1"), Subject("Kotlin", "2"))
// इंसर्शन ऑर्डर बनाए रखने के लिए LinkedHashMap
val linkedMap = subjects.associateTo(LinkedHashMap()) { it.priority to it.name }
// सॉर्टेड कुंजियों के लिए TreeMap
val treeMap = subjects.associateTo(TreeMap()) { it.priority to it.name }
println("LinkedHashMap: $linkedMap")
println("TreeMap: $treeMap")
}
प्रदर्शन तुलना
| विधि | पठनीयता | प्रदर्शन | डुप्लीकेट हैंडलिंग |
|---|---|---|---|
| associate | उच्च | अच्छा | अंतिम जीतता है |
| associateBy | उच्च | अच्छा | अंतिम जीतता है |
| map + toMap | मध्यम | थोड़ा धीमा (मध्यवर्ती सूची) | अंतिम जीतता है |
| groupBy | मध्यम | अच्छा | सभी मान रखता है (List) |
सिफारिश
- associate / associateBy - अधिकांश मामलों के लिए पसंदीदा (सीधा, कुशल)
- groupBy - जब डुप्लीकेट कुंजियों के सभी मान रखने हों
- toMutableMap() - जब MutableMap चाहिए