Junior
Como trabalhar com coleções em Kotlin?
sobes.tech IA
Resposta da IA
Em Kotlin, as coleções representam grupos de objetos. Podem ser modificáveis (mutable) ou imutáveis (immutable).
Coleções imutáveis (Immutable):
- O conteúdo não pode ser alterado após a criação.
- São seguras para leitura em ambientes concorrentes.
- Tipos básicos:
List,Set,Map.
val numbers: List<Int> = listOf(1, 2, 3) // Criar uma lista imutável
// numbers.add(4) // Erro de compilação: coleção imutável
Coleções modificáveis (Mutable):
- O conteúdo pode ser alterado (adicionar, remover, modificar elementos).
- Não são seguras para acesso concorrente por padrão (é necessária sincronização manual).
- Tipos básicos:
MutableList,MutableSet,MutableMap.
val mutableNumbers: MutableList<Int> = mutableListOf(1, 2, 3) // Criar uma lista modificável
mutableNumbers.add(4) // Adicionar elemento
mutableNumbers.remove(2) // Remover elemento
Tipos principais de coleções:
- List: Coleção ordenada que permite duplicados. Acesso por índice.
val names: List<String> = listOf("Alice", "Bob", "Alice") println(names[0]) // "Alice" - Set: Coleção não ordenada que não permite duplicados. Os elementos são únicos.
val uniqueNumbers: Set<Int> = setOf(1, 2, 2, 3) println(uniqueNumbers) // [1, 2, 3] - Map: Coleção de pares chave-valor. Cada chave é única.
val ages: Map<String, Int> = mapOf("Alice" to 30, "Bob" to 25) println(ages["Alice"]) // 30
Funções de extensão para trabalhar com coleções (funções de ordem superior):
Kotlin oferece muitas funções de extensão poderosas para manipular coleções:
filter: Cria uma nova coleção contendo apenas os elementos que satisfazem um predicado.val evenNumbers = numbers.filter { it % 2 == 0 } // [2]map: Transforma cada elemento em um novo elemento, criando uma nova coleção.val squaredNumbers = numbers.map { it * it } // [1, 4, 9]forEach: Executa uma ação para cada elemento.numbers.forEach { println(it) } // Imprime 1, 2, 3 linha por linhareduce: Combina todos os elementos em um único valor usando uma operação.val sum = numbers.reduce { acc, i -> acc + i } // 6fold: Semelhante areduce, mas aceita um valor inicial.val sumWithInitial = numbers.fold(10) { acc, i -> acc + i } // 16 (10 + 1 + 2 + 3)sortedBy: Ordena a coleção por um valor obtido de cada elemento.val sortedNames = listOf("Charlie", "Alice", "Bob").sortedBy { it } // [Alice, Bob, Charlie]groupBy: Agrupa os elementos por uma chave obtida de cada elemento.val groupedNumbers = numbers.groupBy { if (it % 2 == 0) "even" else "odd" } // {odd=[1, 3], even=[2]}
Conversão entre tipos de coleções:
É fácil converter um tipo de coleção em outro, bem como entre versões modificáveis e imutáveis:
val mutableList: MutableList<Int> = listOf(1, 2, 3).toMutableList()
val immutableList: List<Int> = mutableListOf(4, 5, 6).toList()
Trabalhar com coleções em Kotlin é bastante facilitado pela riqueza da biblioteca padrão e pelas funções de extensão.