Sobes.tech
Junior

Kā strādāt ar kolekcijām Kotlin?

sobes.tech AI

Atbilde no AI

Kotlin kolekcijas ir objektu grupas. Tās var būt maināmas (mutable) vai nemaināmas (immutable).

Nemaināmas kolekcijas (Immutable):

  • Saturs nevar tikt mainīts pēc to izveides.
  • Tās ir drošas lasīšanai no vairākiem pavedieniem.
  • Pamattipi: List, Set, Map.
val skaitli: List<Int> = listOf(1, 2, 3) // Nemaināmas saraksts
// skaitli.add(4) // Kompilācijas kļūda: nemaināma kolekcija

Maināmas kolekcijas (Mutable):

  • Saturs var tikt mainīts (pievienošana, dzēšana, elementu maiņa).
  • Tās nav drošas vairākām pavedieniem pēc noklusējuma (prasa sinhronizāciju).
  • Pamattipi: MutableList, MutableSet, MutableMap.
val mainamiSkaitli: MutableList<Int> = mutableListOf(1, 2, 3) // Maināms saraksts
mainamiSkaitli.add(4) // Pievieno elementu
mainamiSkaitli.remove(2) // Dzēš elementu

Galvenie kolekciju tipi:

  • List: Sakārtota kolekcija ar atkārtojumiem. Pieejas pēc indeksa.
    val vardi: List<String> = listOf("Alice", "Bob", "Alice")
    println(vardi[0]) // "Alice"
    
  • Set: Neordinēta kolekcija bez atkārtojumiem. Elementi ir unikāli.
    val unikaliSkaitli: Set<Int> = setOf(1, 2, 2, 3)
    println(unikaliSkaitli) // [1, 2, 3]
    
  • Map: Pāru kolekcija ar atslēgām un vērtībām. Katra atslēga ir unikāla.
    val vecumi: Map<String, Int> = mapOf("Alice" to 30, "Bob" to 25)
    println(vecumi["Alice"]) // 30
    

Paplašinājumi kolekciju darbam (augstākā līmeņa funkcijas):

Kotlin nodrošina daudz jaudīgu paplašināšanas funkciju kolekciju apstrādei:

  • filter: Izveido jaunu kolekciju ar elementiem, kas atbilst predikātam.
    val pāraSkaitļi = skaitli.filter { it % 2 == 0 } // [2]
    
  • map: Pārvērš katru elementu jaunos elementos, veidojot jaunu kolekciju.
    val kvadrātSkaitļi = skaitli.map { it * it } // [1, 4, 9]
    
  • forEach: Veic darbību katram kolekcijas elementam.
    skaitli.forEach { println(it) } // Izvada 1, 2, 3 rindās
    
  • reduce: Apvieno visus kolekcijas elementus vienā vērtībā, izmantojot operāciju.
    val summa = skaitli.reduce { ak, i -> ak + i } // 6
    
  • fold: Līdzīgs reduce, bet pieņem sākotnējo vērtību.
    val summaArSākotnējo = skaitli.fold(10) { ak, i -> ak + i } // 16 (10 + 1 + 2 + 3)
    
  • sortedBy: Sakārto kolekciju pēc vērtības, kas iegūta no katra elementa.
    val sakārtotiVārdi = listOf("Charlie", "Alice", "Bob").sortedBy { it } // [Alice, Bob, Charlie]
    
  • groupBy: Grupē elementus pēc atslēgas, kas iegūta no katra elementa.
    val grupētiSkaitļi = skaitli.groupBy { ja it % 2 == 0 then "patīk" else "nepatīk" } // {nepatīk=[1, 3], patīk=[2]}
    

Konversija starp kolekciju tipiem:

Var viegli konvertēt vienu kolekcijas tipu uz citu, kā arī starp maināmajām un nemaināmajām versijām:

val maināmsSaraksts: MutableList<Int> = listOf(1, 2, 3).toMutableList()
val nemaināmsSaraksts: List<Int> = mutableListOf(4, 5, 6).toList()

Kolekciju darbība Kotlin ievērojami atvieglo, pateicoties bagātīgajai standarta bibliotēkai un paplašināšanas funkcijām.