Sobes.tech
Junior

Ako pracovať s kolekciami v Kotlin?

sobes.tech AI

Odpoveď od AI

V Kotlinu predstavujú kolekcie skupiny objektov. Môžu byť meniteľné (mutable) alebo nemenniteľné (immutable).

Nemenniteľné kolekcie (Immutable):

  • Obsah nemôže byť zmenený po vytvorení.
  • Sú bezpečné na čítanie vo viacerých vláknach.
  • Základné typy: List, Set, Map.
val numbers: List<Int> = listOf(1, 2, 3) // Vytvorenie nemenniteľného zoznamu
// numbers.add(4) // Chyba kompilátora: nemenniteľná kolekcia

Meniteľné kolekcie (Mutable):

  • Obsah môže byť zmenený (pridanie, odstránenie, úprava prvkov).
  • Predvolene nie sú vlákno-bezpečné (vyžaduje sa synchronizácia manuálne).
  • Základné typy: MutableList, MutableSet, MutableMap.
val mutableNumbers: MutableList<Int> = mutableListOf(1, 2, 3) // Vytvorenie meniteľného zoznamu
mutableNumbers.add(4) // Pridanie prvku
mutableNumbers.remove(2) // Odstránenie prvku

Hlavné typy kolekcií:

  • List: Usporiadaná kolekcia, ktorá umožňuje duplicitné prvky. Prístup cez index.
    val names: List<String> = listOf("Alice", "Bob", "Alice")
    println(names[0]) // "Alice"
    
  • Set: Nesporiadaná kolekcia, ktorá neumožňuje duplicitné prvky. Prvky sú jedinečné.
    val uniqueNumbers: Set<Int> = setOf(1, 2, 2, 3)
    println(uniqueNumbers) // [1, 2, 3]
    
  • Map: Kolekcia párov kľúč-hodnota. Každý kľúč je jedinečný.
    val ages: Map<String, Int> = mapOf("Alice" to 30, "Bob" to 25)
    println(ages["Alice"]) // 30
    

Rozšírenia pre prácu s kolekciami (funkcie vyššieho rádu):

Kotlin poskytuje množstvo mocných funkcií na spracovanie kolekcií:

  • filter: Vytvára novú kolekciu obsahujúcu len prvky, ktoré spĺňajú predikát.
    val evenNumbers = numbers.filter { it % 2 == 0 } // [2]
    
  • map: Prevod každého prvku kolekcie na nový prvok, vytvára novú kolekciu.
    val squaredNumbers = numbers.map { it * it } // [1, 4, 9]
    
  • forEach: Vykonáva akciu pre každý prvok kolekcie.
    numbers.forEach { println(it) } // Vypíše 1, 2, 3 na riadky
    
  • reduce: Zlučuje všetky prvky kolekcie do jednej hodnoty pomocou operácie.
    val sum = numbers.reduce { acc, i -> acc + i } // 6
    
  • fold: Podobne ako reduce, ale prijíma počiatočnú hodnotu.
    val sumWithInitial = numbers.fold(10) { acc, i -> acc + i } // 16 (10 + 1 + 2 + 3)
    
  • sortedBy: Usporiada kolekciu podľa hodnoty získanej z každého prvku.
    val sortedNames = listOf("Charlie", "Alice", "Bob").sortedBy { it } // [Alice, Bob, Charlie]
    
  • groupBy: Skupinu prvkov podľa kľúča získaného z každého prvku.
    val groupedNumbers = numbers.groupBy { if (it % 2 == 0) "even" else "odd" } // {odd=[1, 3], even=[2]}
    

Konverzia medzi typmi kolekcií:

Jednoducho môžete konvertovať jeden typ kolekcie na iný, ako aj medzi meniteľnými a nemenniteľnými verziami:

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

Práca s kolekciami v Kotlinu je výrazne jednoduchšia vďaka bohatej štandardnej knižnici a funkciám rozšírenia.