Sobes.tech
Junior

Hoe werk je met collecties in Kotlin?

sobes.tech AI

Antwoord van AI

In Kotlin vertegenwoordigen collecties groepen objecten. Ze kunnen wijzigbaar (mutable) of ongewijzigd (immutable) zijn.

Ongewijzigde collecties (Immutable):

  • De inhoud kan niet worden gewijzigd na creatie.
  • Ze zijn veilig voor lezen in gelijktijdige omgevingen.
  • Basis types: List, Set, Map.
val numbers: List<Int> = listOf(1, 2, 3) // Creëer een ongewijzigde lijst
// numbers.add(4) // Compileerfout: ongewijzigde collectie

Wijzigbare collecties (Mutable):

  • De inhoud kan worden gewijzigd (toevoegen, verwijderen, wijzigen van elementen).
  • Ze zijn standaard niet thread-safe (handmatige synchronisatie vereist).
  • Basis types: MutableList, MutableSet, MutableMap.
val mutableNumbers: MutableList<Int> = mutableListOf(1, 2, 3) // Creëer een wijzigbare lijst
mutableNumbers.add(4) // Element toevoegen
mutableNumbers.remove(2) // Element verwijderen

Belangrijkste collectie types:

  • List: Geordende collectie, staat duplicaten toe. Toegang via index.
    val names: List<String> = listOf("Alice", "Bob", "Alice")
    println(names[0]) // "Alice"
    
  • Set: Niet-gesorteerde collectie, staat duplicaten niet toe. Elementen zijn uniek.
    val uniqueNumbers: Set<Int> = setOf(1, 2, 2, 3)
    println(uniqueNumbers) // [1, 2, 3]
    
  • Map: Collectie van sleutel-waarde paren. Elke sleutel is uniek.
    val ages: Map<String, Int> = mapOf("Alice" to 30, "Bob" to 25)
    println(ages["Alice"]) // 30
    

Uitbreidingsfuncties voor werken met collecties (hoog-ordefuncties):

Kotlin biedt veel krachtige uitbreidingsfuncties voor het verwerken van collecties:

  • filter: Maakt een nieuwe collectie met alleen de elementen die voldoen aan een predicaat.
    val evenNumbers = numbers.filter { it % 2 == 0 } // [2]
    
  • map: Transformeert elk element in een nieuw element, waardoor een nieuwe collectie ontstaat.
    val squaredNumbers = numbers.map { it * it } // [1, 4, 9]
    
  • forEach: Voert een actie uit voor elk element.
    numbers.forEach { println(it) } // Drukt 1, 2, 3 af op aparte regels
    
  • reduce: Combineert alle elementen tot één waarde met behulp van een operatie.
    val sum = numbers.reduce { acc, i -> acc + i } // 6
    
  • fold: Vergelijkbaar met reduce, maar met een beginwaarde.
    val sumWithInitial = numbers.fold(10) { acc, i -> acc + i } // 16 (10 + 1 + 2 + 3)
    
  • sortedBy: Sorteert de collectie op basis van een waarde uit elk element.
    val sortedNames = listOf("Charlie", "Alice", "Bob").sortedBy { it } // [Alice, Bob, Charlie]
    
  • groupBy: Groepeert elementen op basis van een sleutel uit elk element.
    val groupedNumbers = numbers.groupBy { if (it % 2 == 0) "even" else "odd" } // {odd=[1, 3], even=[2]}
    

Conversie tussen collectie types:

Het is eenvoudig om één type collectie naar een ander te converteren, evenals tussen wijzigbare en ongewijzigde versies:

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

Werken met collecties in Kotlin wordt aanzienlijk vereenvoudigd dankzij de rijke standaardbibliotheek en uitbreidingsfuncties.