O que são Collections em Kotlin?
Collections (coleções) são estruturas que agrupam múltiplos elementos. Em Kotlin, existem três tipos principais: List (lista ordenada), Set (conjunto sem duplicatas) e Map (mapeamento chave-valor). Cada uma vem em versão imutável (padrão) e mutável.
Criando coleções
fun main() {
// Imutáveis (somente leitura)
val nomes = listOf("Ana", "Bruno", "Carla")
val ids = setOf(1, 2, 3, 2) // {1, 2, 3} — sem duplicata
val capitais = mapOf("SP" to "São Paulo", "RJ" to "Rio de Janeiro")
// Mutáveis
val tarefas = mutableListOf("Estudar", "Codar")
tarefas.add("Descansar")
}
Operações funcionais
A grande força das coleções em Kotlin são as operações funcionais encadeadas:
data class Produto(val nome: String, val preco: Double, val categoria: String)
fun main() {
val produtos = listOf(
Produto("Notebook", 4500.0, "Tech"),
Produto("Caderno", 25.0, "Papelaria"),
Produto("Mouse", 120.0, "Tech"),
Produto("Caneta", 5.0, "Papelaria"),
Produto("Monitor", 1800.0, "Tech")
)
// Filtrar, transformar e ordenar
val techBaratos = produtos
.filter { it.categoria == "Tech" }
.filter { it.preco < 2000 }
.sortedBy { it.preco }
.map { "${it.nome}: R$ ${it.preco}" }
techBaratos.forEach { println(it) }
// Mouse: R$ 120.0
// Monitor: R$ 1800.0
}
Operações úteis
fun main() {
val numeros = listOf(3, 1, 4, 1, 5, 9, 2, 6)
println(numeros.sum()) // 31
println(numeros.average()) // 3.875
println(numeros.max()) // 9
println(numeros.distinct()) // [3, 1, 4, 5, 9, 2, 6]
println(numeros.take(3)) // [3, 1, 4]
println(numeros.any { it > 5 }) // true
println(numeros.all { it > 0 }) // true
}
Agrupando e associando
data class Aluno(val nome: String, val turma: String)
fun main() {
val alunos = listOf(
Aluno("Fernanda", "A"), Aluno("Lucas", "B"),
Aluno("Mariana", "A"), Aluno("Pedro", "B")
)
val porTurma = alunos.groupBy { it.turma }
porTurma.forEach { (turma, lista) ->
println("Turma $turma: ${lista.map { it.nome }}")
}
// Turma A: [Fernanda, Mariana]
// Turma B: [Lucas, Pedro]
}
Collections em Kotlin são expressivas e poderosas. Com as operações funcionais, você resolve em poucas linhas o que em outras linguagens exigiria loops verbosos.