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.