Em Kotlin, um mapa é uma coleção de pares chave/valor, onde cada chave é única e pode estar associada a apenas um valor. O mesmo valor pode estar associado a várias chaves. Podemos declarar chaves e valores de qualquer tipo; não há restrições.
Mapas em Kotlin podem ser mutáveis (mutableMapOf
) ou somente leitura (mapOf
). Em outras linguagens de programação, mapas também são conhecidos como dicionários ou arrays associativos.
Para criar mapas, utilize as funções da biblioteca padrão mapOf()
para mapas de leitura e mutableMapOf()
para mapas mutáveis.
val mapaLeitura = mapOf("um" to 1, "dois" to 2, "três" to 3)
println(mapaLeitura)
val mapaMutavel = mutableMapOf("um" to 1, "dois" to 2, "três" to 3)
println(mapaMutavel)
Um mapa em Kotlin pode ser criado a partir de um HashMap
do Java.
fun main() {
val oMapa = HashMap<String, Int>()
oMapa["um"] = 1
oMapa["dois"] = 2
oMapa["três"] = 3
println(oMapa)
}
Podemos utilizar o método Pair()
para criar pares chave/valor ao construir um mapa.
val oMapa = mapOf(Pair("um", 1), Pair("dois", 2), Pair("três", 3))
println(oMapa)
Mapas em Kotlin possuem propriedades para obter todas as entradas, chaves e valores do mapa.
val oMapa = mapOf("um" to 1, "dois" to 2, "três" to 3)
println("Entradas: ${oMapa.entries}")
println("Chaves: ${oMapa.keys}")
println("Valores: ${oMapa.values}")
Existem várias maneiras de iterar através de mapas em Kotlin:
val oMapa = mapOf("um" to 1, "dois" to 2, "três" to 3)
println(oMapa.toString())
val oMapa = mapOf("um" to 1, "dois" to 2, "três" to 3)
val iterador = oMapa.keys.iterator()
while (iterador.hasNext()) {
val chave = iterador.next()
val valor = oMapa[chave]
println("$chave = $valor")
}
val oMapa = mapOf("um" to 1, "dois" to 2, "três" to 3)
for ((chave, valor) in oMapa) {
println("$chave = $valor")
}
val oMapa = mapOf("um" to 1, "dois" to 2, "três" to 3)
oMapa.forEach { chave, valor ->
println("Chave = $chave, Valor = $valor")
}
Podemos usar a propriedade size
ou o método count()
para obter o número total de elementos em um mapa.
val oMapa = mapOf("um" to 1, "dois" to 2, "três" to 3)
println("Tamanho do mapa: ${oMapa.size}")
println("Tamanho do mapa: ${oMapa.count()}")
O método containsKey()
verifica se o mapa contém uma chave específica, enquanto containsValue()
verifica se o mapa contém um valor específico.
val oMapa = mapOf("um" to 1, "dois" to 2, "três" to 3)
if (oMapa.containsKey("dois")) {
println(true)
} else {
println(false)
}
if (oMapa.containsValue(2)) {
println(true)
} else {
println(false)
}
O método isEmpty()
retorna true se o mapa estiver vazio e false caso contrário.
val oMapa = mapOf("um" to 1, "dois" to 2, "três" to 3)
if (oMapa.isEmpty()) {
println(true)
} else {
println(false)
}
O método get()
pode ser usado para obter o valor correspondente a uma chave específica.
val oMapa = mapOf("um" to 1, "dois" to 2, "três" to 3)
println("O valor para a chave 'dois': ${oMapa.get("dois")}")
println("O valor para a chave 'dois': ${oMapa["dois"]}")
Podemos usar o operador +
para adicionar dois ou mais mapas em um único mapa. Isso adicionará o segundo mapa ao primeiro, descartando os elementos duplicados.
val primeiroMapa = mapOf("um" to 1, "dois" to 2, "três" to 3)
val segundoMapa = mapOf("um" to 10, "quatro" to 4)
val resultadoMapa = primeiroMapa + segundoMapa
println(resultadoMapa)
Podemos usar o operador -
para subtrair um mapa de outro. Isso removerá todas as chaves presentes na lista do mapa e retornará o resultado.
val oMapa = mapOf("um" to 1, "dois" to 2, "três" to 3)
val listaDeChaves = listOf("um", "quatro")
val resultadoMapa = oMapa - listaDeChaves
println(resultadoMapa)
Podemos usar o método remove()
para remover um elemento de um mapa mutável, ou o operador -=
para realizar a mesma operação.
val oMapa = mutableMapOf("um" to 1, "dois" to 2, "três" to 3, "quatro" to 4)
oMapa.remove("dois")
println(oMapa)
oMapa -= listOf("três")
println(oMapa)
Podemos usar o método toSortedMap()
para ordenar os elementos em ordem crescente ou sortedDescending()
para ordenar em ordem decrescente. Também podemos criar um mapa ordenado com os pares chave/valor fornecidos usando o método sortedMapOf()
.
val oMapa = mapOf("dois" to 2, "um" to 1, "quatro" to 4, "três" to 3,)
val resultadoMapa = oMapa.toSortedMap()
println(resultadoMapa)
Podemos usar filterKeys()
ou filterValues()
para filtrar as entradas do mapa. O método filter()
também pode ser utilizado para filtrar elementos que correspondem à chave e ao valor.
val oMapa = mapOf("um" to 1, "dois" to 2, "três" to 3, "quatro" to 4)
var resultadoMapa = oMapa.filterValues { it > 2 }
println(resultadoMapa)
resultadoMapa = oMapa.filterKeys { it == "dois" }
println(resultadoMapa)
resultadoMapa = oMapa.filter { it.key == "dois" || it.value == 4 }
println(resultadoMapa)
Podemos usar o método map()
para mapear todos os elementos usando a função fornecida.
val oMapa = mapOf("um" to 1, "dois" to 2, "três" to 3)
val resultadoMapa = oMapa.map { (chave, valor) -> "Chave é $chave, Valor é $valor" }
println(resultadoMapa)