Kotlin Collections: Her Seviyeden Geliştirici için Kullanışlı Rehber

Kotlin koleksiyonları, günlük yazılım geliştirme süreçlerinde sıkça kullanılan güçlü ve esnek yapılardır. Listeler, kümeler ve haritalar gibi farklı türleri sayesinde verilerinizi düzenleyebilir, işleyebilir ve dönüştürebilirsiniz. Kotlin, koleksiyonlarla çalışmayı kolaylaştıran zengin bir API sunarak, kodunuzu hem kısa hem de okunabilir hale getirir. Bu rehberde, Kotlin koleksiyonlarının sunduğu en faydalı özelliklere ve fonksiyonlara göz atacağız.

 

Koleksiyon Türleri

Kotlin’de koleksiyonlar temel olarak 3 kategoriye ayrılır:

  1. List: Sıralı elemanlar için kullanılır. Aynı elemandan birden fazla barındırabilir.

    • Örnek: val numbers = listOf(1, 2, 3, 3, 4)

  2. Set: Benzersiz elemanları depolar. Aynı elemanı birden fazla eklemek mümkün değildir.

    • Örnek: val uniqueNumbers = setOf(1, 2, 3, 4)

  3. Map: Anahtar-değer (key-value) çiftlerini depolar.

    • Örnek: val userMap = mapOf("name" to "Ahmet", "age" to 25)

Her bir türün mutable (değiştirilebilir) ve immutable (değiştirilemez) versiyonları bulunur. Örneğin, listOf immutable iken mutableListOf değiştirilebilir bir listedir.


 


Kotlin Koleksiyon Fonksiyonları

Kotlin, koleksiyonlarla çalışmayı kolaylaştıran birçok yerleşik fonksiyon sunar. İşte, Kotlin koleksiyonlarında sıkça kullanılan fonksiyonlar ve örnekler:

1. count()

Belirli bir koşulu karşılayan elemanların sayısını döndürür.

val text = "Kotlin"
println(text.count()) // 6
println(text.count { it.isUpperCase() }) // 1
2. filter()

Belirli bir şarta uyan elemanları seçer.

val numbers = listOf(1, 2, 3, 4, 5)
val evenNumbers = numbers.filter { it % 2 == 0 }
println(evenNumbers) // [2, 4]
3. map()

Her eleman üzerinde bir dönüşüm yapar ve yeni bir liste döndürür.

val numbers = listOf(1, 2, 3)
val squaredNumbers = numbers.map { it * it }
println(squaredNumbers) // [1, 4, 9]
4. groupBy()

Elemanları verilen bir şarta göre gruplar.

val names = listOf("Ali", "Ahmet", "Ayşe", "Fatma")
val groupedByInitial = names.groupBy { it.first() }
println(groupedByInitial) // {A=[Ali, Ahmet, Ayşe], F=[Fatma]}
5. **fold() ve reduce()

Koleksiyon elemanlarını birleştirerek tek bir sonuç elde eder.

val numbers = listOf(1, 2, 3, 4)
val sum = numbers.fold(0) { acc, number -> acc + number }
println(sum) // 10
6. distinct()

Tekrarlanan elemanları kaldırır.

val numbers = listOf(1, 2, 2, 3, 4, 4)
println(numbers.distinct()) // [1, 2, 3, 4]
7. zip()

İki listeyi birleştirir.

val names = listOf("Ali", "Ayşe")
val ages = listOf(25, 30)
val combined = names.zip(ages)
println(combined) // [(Ali, 25), (Ayşe, 30)]
8. chunked()

Koleksiyonu belirli boyutlarda alt listelere böler.

val numbers = (1..10).toList()
println(numbers.chunked(3)) // [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10]]
9. any() ve all()

Belirli bir şarta uyan elemanların olup olmadığını kontrol eder.

val numbers = listOf(1, 2, 3, 4, 5)
println(numbers.any { it > 4 }) // true
println(numbers.all { it > 0 }) // true
10. sorted() ve sortedBy()

Koleksiyonu sıralar.

val numbers = listOf(5, 2, 3, 1, 4)
println(numbers.sorted()) // [1, 2, 3, 4, 5]
11. mapNotNull()

Null olmayan elemanları dönüştürür.

val numbers = listOf("1", "2", null, "4")
val nonNullNumbers = numbers.mapNotNull { it?.toIntOrNull() }
println(nonNullNumbers) // [1, 2, 4]
12. onEach()

Her eleman üzerinde bir işlem yapar ve aynı koleksiyonu döndürür.

val numbers = listOf(1, 2, 3)
numbers.onEach { println(it) } // 1, 2, 3
13. flatten()

İç içe olan koleksiyonları düz bir listeye çevirir.

val nestedLists = listOf(listOf(1, 2), listOf(3, 4))
println(nestedLists.flatten()) // [1, 2, 3, 4]
14. partition()

Belirli bir koşula göre iki alt listeye böler.

val numbers = listOf(1, 2, 3, 4, 5)
val (even, odd) = numbers.partition { it % 2 == 0 }
println(even) // [2, 4]
println(odd) // [1, 3, 5]
15. take() ve drop()

Belirli sayıda elemanı alır ya da düşürür.

val numbers = listOf(1, 2, 3, 4, 5)
println(numbers.take(3)) // [1, 2, 3]
println(numbers.drop(3)) // [4, 5]
16. toMutableList()

Koleksiyonu mutable bir listeye dönüştürür.

val numbers = listOf(1, 2, 3)
val mutableNumbers = numbers.toMutableList()
mutableNumbers.add(4)
println(mutableNumbers) // [1, 2, 3, 4]
17. elementAt()

Belirli bir indeksteki elemanı döndürür.

val numbers = listOf(1, 2, 3, 4)
println(numbers.elementAt(2)) // 3
18. indexOf() ve lastIndexOf()

Bir elemanın ilk ve son görüldüğü indeksleri döndürür.

val numbers = listOf(1, 2, 3, 2, 4)
println(numbers.indexOf(2)) // 1
println(numbers.lastIndexOf(2)) // 3
19. replace()

Bir String içindeki belirli bir substring’i değiştirir.

val text = "Kotlin is great"
println(text.replace("great", "awesome")) // Kotlin is awesome
20. shuffle()

Elemanları karıştırır.

val numbers = listOf(1, 2, 3, 4, 5)
println(numbers.shuffled()) // Örn: [4, 1, 5, 3, 2]
21. capitalize() ve decapitalize()

String’in ilk harfini büyük veya küçük yapar.

val text = "kotlin"
println(text.capitalize()) // Kotlin
println(text.decapitalize()) // kotlin
22. isEmpty() ve isBlank()

Bir String’in boş veya sadece boşluklardan oluşup oluşmadığını kontrol eder.

val text = "  "
println(text.isEmpty()) // false
println(text.isBlank()) // true
23. padStart() ve padEnd()

Bir String’in başına veya sonuna belirli bir karakter ekler.

val text = "Kotlin"
println(text.padStart(10, '*')) // ****Kotlin
println(text.padEnd(10, '-')) // Kotlin----
24. split() ve substring()

String’i ayırır veya bir kısmını döndürür.

val text = "Kotlin is great"
println(text.split(" ")) // [Kotlin, is, great]
println(text.substring(0, 6)) // Kotlin

Kotlin koleksiyonları, hem temel hem de ileri düzey işlemler için geniş bir fonksiyon yelpazesi sunar. Bu rehberde, koleksiyonlarla çalışırken işinizi kolaylaştıracak en önemli fonksiyonları ele aldım. Artık projelerinizde daha temiz, daha etkili ve daha okunabilir kodlar yazabilirsiniz.

Kotlin dünyasında koleksiyonlarla çalışmayı öğrenmek sadece verimliliğinizi artırmakla kalmaz, aynı zamanda kodunuza modern ve esnek bir yapı kazandırır. Siz de bu güçlü araçları kullanarak projelerinizi bir üst seviyeye taşıyabilirsiniz.