Sobes.tech
Junior

Kaip dirbti su kolekcijomis Kotlin?

sobes.tech AI

Atsakymas iš AI

Kotlin'e kolekcijos yra objektų grupės. Jos gali būti keičiamos (mutable) arba nekintamos (immutable).

Nekintamos kolekcijos (Immutable):

  • Jų turinys negali būti pakeistas po sukūrimo.
  • Yra saugios skaityti keliuose srautuose.
  • Pagrindiniai tipai: List, Set, Map.
val numbers: List<Int> = listOf(1, 2, 3) // Nekintamas sąrašas
// numbers.add(4) // Klaidų kompiliatoriuje: nekintama kolekcija

Keičiamų kolekcijų (Mutable):

  • Jų turinys gali būti keičiamas (pridedant, išimant, keičiant elementus).
  • Pagal numatytuosius nustatymus nėra srauto saugumo (reikalingas rankinis sinchronizavimas).
  • Pagrindiniai tipai: MutableList, MutableSet, MutableMap.
val mutableNumbers: MutableList<Int> = mutableListOf(1, 2, 3) // Keičiamas sąrašas
mutableNumbers.add(4) // Pridėti elementą
mutableNumbers.remove(2) // Pašalinti elementą

Pagrindiniai kolekcijų tipai:

  • List: Tvarkytas kolekcija, leidžianti pasikartojančius elementus. Prieiga per indeksą.
    val names: List<String> = listOf("Alice", "Bob", "Alice")
    println(names[0]) // "Alice"
    
  • Set: Nenurodyta kolekcija, neleidžianti pasikartojančių elementų. Elementai unikalūs.
    val uniqueNumbers: Set<Int> = setOf(1, 2, 2, 3)
    println(uniqueNumbers) // [1, 2, 3]
    
  • Map: Raktų ir reikšmių porų kolekcija. Kiekvienas raktas unikalus.
    val ages: Map<String, Int> = mapOf("Alice" to 30, "Bob" to 25)
    println(ages["Alice"]) // 30
    

Plėtros funkcijos darbui su kolekcijomis (aukštesnio lygio funkcijos):

Kotlin siūlo daugybę galingų funkcijų kolekcijų apdorojimui:

  • filter: Sukuria naują kolekciją, kurią sudaro tik elementai, atitinkantys predikatą.
    val evenNumbers = numbers.filter { it % 2 == 0 } // [2]
    
  • map: Paverčia kiekvieną kolekcijos elementą nauju elementu, sukurdama naują kolekciją.
    val squaredNumbers = numbers.map { it * it } // [1, 4, 9]
    
  • forEach: Atlieka veiksmą kiekvienam elementui.
    numbers.forEach { println(it) } // Išves 1, 2, 3 eilutėmis
    
  • reduce: Sujungia visus elementus į vieną reikšmę, taikant operaciją.
    val sum = numbers.reduce { acc, i -> acc + i } // 6
    
  • fold: Panašus į reduce, bet priima pradžios reikšmę.
    val sumWithInitial = numbers.fold(10) { acc, i -> acc + i } // 16 (10 + 1 + 2 + 3)
    
  • sortedBy: Rikiuoja kolekciją pagal reikšmę, gautą iš kiekvieno elemento.
    val sortedNames = listOf("Charlie", "Alice", "Bob").sortedBy { it } // [Alice, Bob, Charlie]
    
  • groupBy: Grupuoja elementus pagal raktą, gautą iš kiekvieno elemento.
    val groupedNumbers = numbers.groupBy { if (it % 2 == 0) "even" else "odd" } // {odd=[1, 3], even=[2]}
    

Konversija tarp kolekcijų tipų:

Galite lengvai konvertuoti vieno tipo kolekciją į kitą, taip pat tarp keičiamų ir nekintamų versijų:

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

Kolekcijų darbą Kotlin'e žymiai palengvina standartinė biblioteka ir plėtros funkcijos, kurios yra turtingos ir patogios naudoti.