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 regelsreduce: Combineert alle elementen tot één waarde met behulp van een operatie.val sum = numbers.reduce { acc, i -> acc + i } // 6fold: Vergelijkbaar metreduce, 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.