0Pricing
Kotlin Academy · Aula

Data classes em coleções e como chaves de mapas

Use data classes em conjuntos e mapas aproveitando a igualdade estrutural.

Data classes em coleções e como chaves de mapas é uma aula grátis de Kotlin Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Kotlin Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Kotlin Academy inclui 4 aulas no total.

Classes de dados como objetos de valor

Como as classes de dados substituem equals e hashCode estruturalmente, elas funcionam perfeitamente em conjuntos e como chaves de mapas — ao contrário das classes comuns.

Classe comum: chave de mapa inválida

Uma classe comum usa igualdade por referência por padrão. Dois objetos visualmente iguais são chaves de mapa diferentes.
class Key(val id: Int)  // no equals/hashCode
val map = mutableMapOf<Key, String>()
val k1 = Key(1)
val k2 = Key(1)  // same id, different object
map[k1] = "value"
println(map[k2])  // null! k2 != k1 by reference

Classe de dados: chave de mapa correta

Uma classe de dados usa igualdade estrutural. Dois objetos com as mesmas propriedades são iguais.
data class Key(val id: Int)
val map = mutableMapOf<Key, String>()
val k1 = Key(1)
val k2 = Key(1)
map[k1] = "value"
println(map[k2])  // "value"! Equal by value

Classe de dados em um conjunto

Os conjuntos usam equals e hashCode para eliminar duplicatas. As classes de dados eliminam duplicatas corretamente.
data class Tag(val name: String)
val tags = mutableSetOf<Tag>()
tags.add(Tag("kotlin"))
tags.add(Tag("kotlin"))  // duplicate
tags.add(Tag("java"))
println(tags.size)  // 2 (not 3)

GroupBy com classes de dados

Agrupe coleções por uma chave de classe de dados.
data class Category(val name: String, val parent: String)
val items = listOf(
    "List" to Category("Collections", "stdlib"),
    "Map" to Category("Collections", "stdlib"),
    "Flow" to Category("Coroutines", "kotlinx")
)
val grouped = items.groupBy { it.second }
println(grouped.keys.size)  // 2

Contando ocorrências com Map

Conte ocorrências de dados estruturados usando uma classe de dados como chave de mapa.
data class Pair2(val x: Int, val y: Int)
val points = listOf(Pair2(1,2), Pair2(1,2), Pair2(3,4))
val counts = points.groupingBy { it }.eachCount()
println(counts)  // {Pair2(x=1, y=2)=2, Pair2(x=3, y=4)=1}

Classes de dados aninhadas

As classes de dados podem conter outras classes de dados. Equals e hashCode são profundos para classes de dados aninhadas.
data class Address(val city: String, val country: String)
data class Person(val name: String, val address: Address)
val p1 = Person("Alice", Address("Berlin", "DE"))
val p2 = Person("Alice", Address("Berlin", "DE"))
println(p1 == p2)  // true

sortedBy com classes de dados

Ordene uma lista de instâncias de classes de dados por uma propriedade.
data class Student(val name: String, val grade: Double)
val students = listOf(
    Student("Bob", 3.2),
    Student("Alice", 3.8),
    Student("Charlie", 2.9)
)
println(students.sortedBy { it.grade })

Classes de dados e armazenamento em cache

Use classes de dados como chaves de cache em um HashMap quando a chave de cache for composta.
data class CacheKey(val userId: Long, val resourceType: String)
val cache = HashMap<CacheKey, ByteArray>()
val key = CacheKey(42, "avatar")
cache[key] = byteArrayOf(1, 2, 3)
println(cache[CacheKey(42, "avatar")] != null)  // true

distinct em classes de dados

distinct() em uma lista de classes de dados usa equals para remover duplicatas.
data class Event(val type: String, val ts: Long)
val events = listOf(
    Event("click", 1000),
    Event("click", 1000),  // duplicate
    Event("scroll", 2000)
)
println(events.distinct().size)  // 2

Chaves imutáveis são mais seguras

Sempre use classes de dados com propriedades val como chaves de mapas ou conjuntos. Alterar uma chave depois da inserção corrompe a estrutura de dados.
data class ImmutableKey(val id: Int)  // val properties only
// DON'T: data class MutableKey(var id: Int)  // changing id breaks map!

Verificação rápida

Por que as classes de dados funcionam corretamente como chaves de Map, enquanto as classes comuns geralmente não funcionam?

Recapitulação

As classes de dados funcionam como chaves de Map e elementos de Set porque têm equals/hashCode estrutural correto. Use propriedades val para manter as chaves imutáveis. Aproveite groupBy, distinct e sortedBy com classes de dados para realizar consultas avançadas.

Perguntas Frequentes

A aula “Data classes em coleções e como chaves de mapas” é grátis?

Sim — o texto completo de “Data classes em coleções e como chaves de mapas” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Kotlin Academy, atualize para CoddyKit PRO. O curso de Kotlin Academy inclui 4 aulas no total.

O que vou aprender em “Data classes em coleções e como chaves de mapas”?

Use data classes em conjuntos e mapas aproveitando a igualdade estrutural. Você pratica Kotlin Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Kotlin Academy?

Nenhuma experiência prévia é necessária. Kotlin Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.

Quanto tempo leva a aula “Data classes em coleções e como chaves de mapas”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Kotlin Academy?

Sim. Cada aula de Kotlin Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Noções básicas de data class: métodos gerados automaticamente
  2. Copiando com copy() e substituições parciais
  3. Declarações de desestruturação com componentN
  4. Data classes em coleções e como chaves de mapas
← Voltar para Kotlin Academy