Sobes.tech
Junior

Kotlin'de koleksiyonlarla nasıl çalışılır?

sobes.tech yapay zeka

AI'dan gelen yanıt

Kotlin'de koleksiyonlar, nesnelerin gruplarını temsil eder. Bunlar değiştirilebilir (mutable) veya değiştirilemez (immutable) olabilir.

Değiştirilemez koleksiyonlar (Immutable):

  • İçerik, oluşturulduktan sonra değiştirilemez.
  • Çoklu iş parçacığı ortamlarında okuma için güvenlidir.
  • Temel türler: List, Set, Map.
val numbers: List<Int> = listOf(1, 2, 3) // Değiştirilemez liste oluşturma
// numbers.add(4) // Derleme hatası: değiştirilemez koleksiyon

Değiştirilebilir koleksiyonlar (Mutable):

  • İçerik değiştirilebilir (ekleme, silme, öğeleri değiştirme).
  • Varsayılan olarak çoklu iş parçacığı güvenli değildir (manuel senkronizasyon gerekir).
  • Temel türler: MutableList, MutableSet, MutableMap.
val mutableNumbers: MutableList<Int> = mutableListOf(1, 2, 3) // Değiştirilebilir liste oluşturma
mutableNumbers.add(4) // Öğeyi ekleme
mutableNumbers.remove(2) // Öğeyi kaldırma

Ana koleksiyon türleri:

  • List: Sıralı koleksiyon, tekrar eden öğelere izin verir. İndeks ile erişim.
    val names: List<String> = listOf("Alice", "Bob", "Alice")
    println(names[0]) // "Alice"
    
  • Set: Sırasız koleksiyon, tekrar eden öğelere izin vermez. Öğeler benzersizdir.
    val uniqueNumbers: Set<Int> = setOf(1, 2, 2, 3)
    println(uniqueNumbers) // [1, 2, 3]
    
  • Map: Anahtar-değer çiftleri koleksiyonu. Her anahtar benzersizdir.
    val ages: Map<String, Int> = mapOf("Alice" to 30, "Bob" to 25)
    println(ages["Alice"]) // 30
    

Koleksiyonlar ile çalışma için genişletme fonksiyonları (yüksek dereceli fonksiyonlar):

Kotlin, koleksiyonları işlemek için birçok güçlü genişletme fonksiyonu sağlar:

  • filter: Sadece belirli koşulu sağlayan öğeleri içeren yeni bir koleksiyon oluşturur.
    val evenNumbers = numbers.filter { it % 2 == 0 } // [2]
    
  • map: Her öğeyi yeni bir öğeye dönüştürür ve yeni bir koleksiyon oluşturur.
    val squaredNumbers = numbers.map { it * it } // [1, 4, 9]
    
  • forEach: Her öğe için işlem gerçekleştirir.
    numbers.forEach { println(it) } // 1, 2, 3 satır satır yazdırır
    
  • reduce: Tüm öğeleri tek bir değere birleştirir, bir işlem kullanarak.
    val sum = numbers.reduce { acc, i -> acc + i } // 6
    
  • fold: reduce'a benzer, ancak başlangıç değeri alır.
    val sumWithInitial = numbers.fold(10) { acc, i -> acc + i } // 16 (10 + 1 + 2 + 3)
    
  • sortedBy: Her öğeden alınan değere göre koleksiyonu sıralar.
    val sortedNames = listOf("Charlie", "Alice", "Bob").sortedBy { it } // [Alice, Bob, Charlie]
    
  • groupBy: Her öğeden alınan anahtara göre öğeleri gruplar.
    val groupedNumbers = numbers.groupBy { if (it % 2 == 0) "even" else "odd" } // {odd=[1, 3], even=[2]}
    

Koleksiyon türleri arasında dönüşüm:

Bir koleksiyon türünü diğerine dönüştürmek veya değiştirilebilir ile değiştirilemez sürümler arasında geçiş yapmak kolaydır:

val mutableList: MutableList<Int> = listOf(1, 2, 3).toMutableList()
val immutableList: List<Int> = mutableListOf(4, 5, 6).toList()

Kotlin'de koleksiyonlarla çalışma, standart kütüphane ve genişletme fonksiyonlarının zenginliği sayesinde büyük ölçüde kolaylaşır.