Sobes.tech
Junior

როგორ მუშაობა კოლექციებთან Kotlin-ში?

sobes.tech AI

პასუხი AI-სგან

Kotlin-ში კოლექციები წარმოადგენს ობიექტების ჯგუფებს. ისინი შეიძლება იყოს მუტაბლური (mutable) ან იმმუტაბლური (immutable).

IMMUTABLE კოლექციები:

  • მათი შინაარსი ვერ იცვლება შექმნის შემდეგ.
  • უსაფრთხოა წასაკითხად მრავალთრიან გარემოში.
  • ძირითადი ტიპები: List, Set, Map.
val numbers: List<Int> = listOf(1, 2, 3) // IMMUTABLE სია
// numbers.add(4) // კომპილაციის შეცდომა: IMMUTABLE კოლექცია

მუტაბლური კოლექციები (Mutable):

  • მათი შინაარსი შეიძლება შეიცვალოს (დამატება, წაშლა, ცვლილება).
  • როგორც წესი, არ არის თრენდ-სეიფი (სინქრონიზაცია საჭიროა ხელით).
  • ძირითადი ტიპები: MutableList, MutableSet, MutableMap.
val mutableNumbers: MutableList<Int> = mutableListOf(1, 2, 3) // მუტაბლური სია
mutableNumbers.add(4) // ელემენტის დამატება
mutableNumbers.remove(2) // ელემენტის წაშლა

ძირითადი კოლექციის ტიპები:

  • List: მოწესრიგებული კოლექცია, რომელიც საშუალებას აძლევს დუბლიკატებს. წვდომა ინდექსით.
    val names: List<String> = listOf("Alice", "Bob", "Alice")
    println(names[0]) // "Alice"
    
  • Set: არაწესრიგი კოლექცია, რომელიც არ აძლევს დუბლიკატებს. ელემენტები უნიკალურია.
    val uniqueNumbers: Set<Int> = setOf(1, 2, 2, 3)
    println(uniqueNumbers) // [1, 2, 3]
    
  • Map: წყვილები კლიად-ღირებულებით. თითოეული კლიდი უნიკალურია.
    val ages: Map<String, Int> = mapOf("Alice" to 30, "Bob" to 25)
    println(ages["Alice"]) // 30
    

გაფართოებები კოლექციებთან მუშაობისთვის (ფუნქციები მაღალი დონის):

Kotlin-ი უზრუნველყოფს მრავალ მძლავრ ფუნქციას კოლექციების დამუშავებისთვის:

  • filter: ქმნის ახალ კოლექციას, რომელიც შეიცავს მხოლოდ იმ ელემენტებს, რომლებიც აკმაყოფილებენ წინაპირობას.
    val evenNumbers = numbers.filter { it % 2 == 0 } // [2]
    
  • map: გარდაქმნის თითოეულ ელემენტს ახალ ელემენტად, ქმნის ახალ კოლექციას.
    val squaredNumbers = numbers.map { it * it } // [1, 4, 9]
    
  • forEach: ასრულებს მოქმედებას თითოეულ ელემენტზე.
    numbers.forEach { println(it) } // გამოიტანს 1, 2, 3 ხაზზე
    
  • reduce: აერთიანებს ყველა ელემენტს ერთ მნიშვნელობაში ოპერაციის გამოყენებით.
    val sum = numbers.reduce { acc, i -> acc + i } // 6
    
  • fold: მსგავსია reduce-ის, მაგრამ იღებს საწყის მნიშვნელობას.
    val sumWithInitial = numbers.fold(10) { acc, i -> acc + i } // 16 (10 + 1 + 2 + 3)
    
  • sortedBy: სორტირებს კოლექციას თითოეული ელემენტის მნიშვნელობის მიხედვით.
    val sortedNames = listOf("Charlie", "Alice", "Bob").sortedBy { it } // [Alice, Bob, Charlie]
    
  • groupBy: ჯგუფավորում ელემენტებს მათი კლიადის მიხედვით.
    val groupedNumbers = numbers.groupBy { if (it % 2 == 0) "even" else "odd" } // {odd=[1, 3], even=[2]}
    

კოლექციების ტიპებს შორის კონვერსია:

შეგიძლიათ მარტივად კონვერტიროთ ერთ ტიპის კოლექცია სხვა ტიპში, ასევე მუტაბლური და იმმუტაბლური ვერსიებს შორის:

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

კოლექციებთან მუშაობა Kotlin-ში მნიშვნელოვნად გამარტივებულია სტანდარტული ბიბლიოთეკისა და გაფართოების ფუნქციების სიმდიდრის წყალობით.