Um guia rápido para iterar um mapa no Groovy
1. Introdução
Neste breve tutorial, veremos maneiras de iterar em um mapa no Groovy usando recursos de linguagem padrão comoeach,eachWithIndex, and afor-in loop.
2. O Métodoeach
Vamos imaginar que temos o seguinte mapa:
def map = [
'FF0000' : 'Red',
'00FF00' : 'Lime',
'0000FF' : 'Blue',
'FFFF00' : 'Yellow'
]
Podemos iterar no mapa fornecendo o métodoeach com um fechamento simples:
map.each { println "Hex Code: $it.key = Color Name: $it.value" }
Também podemos melhorar um pouco a legibilidade, atribuindo um nome à variável de entrada:
map.each { entry -> println "Hex Code: $entry.key = Color Name: $entry.value" }
Ou, se preferirmos abordar a chave e o valor separadamente, podemos listá-los separadamente em nosso encerramento:
map.each { key, val ->
println "Hex Code: $key = Color Name $val"
}
In Groovy, maps created with the literal notation are ordered. Podemos esperar que nossa saída esteja na mesma ordem que definimos em nosso mapa original.
3. O MétodoeachWithIndex
Às vezes, queremos saber oindex enquanto estamos iterando.
Por exemplo, digamos que queremos recuar todas as outras linhas em nosso mapa. Para fazer isso no Groovy, usaremos o métodoeachWithIndex com as variáveisentryeindex:
map.eachWithIndex { entry, index ->
def indent = ((index == 0 || index % 2 == 0) ? " " : "")
println "$index Hex Code: $entry.key = Color Name: $entry.value"
}
Tal como acontece com o métodoeach, podemos escolher usar as variáveiskeyevalue em nosso fechamento em vez deentry:
map.eachWithIndex { key, val, index ->
def indent = ((index == 0 || index % 2 == 0) ? " " : "")
println "$index Hex Code: $key = Color Name: $val"
}
4. Usando um loopFor-in
Por outro lado, se nosso caso de uso se adequar melhor à programação imperativa, também podemos usar uma instruçãofor-in para iterar em nosso mapa:
for (entry in map) {
println "Hex Code: $entry.key = Color Name: $entry.value"
}
5. Conclusão
Neste breve tutorial, aprendemos como iterar um mapa usando os métodoseacheeachWithIndex do Groovy e um loopfor-in.
O código de exemplo está disponível emGitHub.