Sobes.tech
Junior

Kako raditi sa kolekcijama u Kotlinu?

sobes.tech АИ

Одговор од АИ

У Kotlin-у колекције представљају групе објеката. Могу бити променљиве (mutable) или непроменљиве (immutable).

Непроменљиве колекције (Immutable):

  • Садржај не може бити измењен након креирања.
  • Безбедне су за читање у више нитова.
  • Основне типове: List, Set, Map.
val numbers: List<Int> = listOf(1, 2, 3) // Креирање непроменљивог списка
// numbers.add(4) // Грешка компајлера: непроменљива колекција

Променљиве колекције (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
    

Проширења за рад са колекцијама (функције високог реда):

Кotlin пружа много моћних функција за обраду колекција:

  • 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-у значајно се олакшава захваљујући богатству стандардне библиотеке и функција за проширење.