Después de de nuestra larga compilación de información resolvimos esta aprieto que suelen tener algunos los lectores. Te regalamos la respuesta y esperamos servirte de mucha apoyo.
Solución:
El objetivo de usar Mapas es el acceso directo. Si está seguro de que el valor en un mapa nunca será Groovy-false
entonces puedes hacer esto:
def mymap = [name:"Gromit", likes:"cheese", id:1234]
def key = "likes"
if(mymap[key])
println mymap[key]
Sin embargo, si el valor pudiera ser Groovy-false
Deberías usar:
if(mymap.containsKey(key))
println mymap[key]
Sin embargo, la solución más fácil, si sabe que el valor no va a ser Groovy-false
(o puede ignorarlo), y desea un valor predeterminado, es así:
def value = mymap[key] ?: "default"
Estas tres soluciones son significativamente más rápidas que sus ejemplos, porque no escanean todo el mapa en busca de keys. Se aprovechan de la HashMap
(o LinkedHashMap
) diseño que hace directa key acceso casi instantáneo.
def mymap = [name:"Gromit", id:1234]
def x = mymap.find it.key == "likes" ?.value
if(x)
println "x value: $x"
println x.getClass().name
?.
cheques para null y no crea una excepción en Groovy. Si el key no existe, el resultado será un org.codehaus.groovy.runtime.NullObject
.
En general, esto depende de lo que contenga su mapa. si tiene null valores, las cosas pueden ponerse complicadas y containsKey(key)
o get(key, default)
debe usarse para detectar si el elemento realmente existe. En muchos casos, el código puede volverse más simple, puede definir un valor predeterminado:
def mymap = [name:"Gromit", likes:"cheese", id:1234]
def x1 = mymap.get('likes', '[nothing specified]')
println "x value: $x" }
Tenga en cuenta también que containsKey()
o get()
son mucho más rápidos que configurar un cierre para verificar el elemento mymap.find it.key == "likes"
. Usar el cierre solo tiene sentido si realmente haces algo más complejo allí. Podrías, por ejemplo, hacer esto:
mymap.find // "it" is the default parameter
if (it.key != "likes") return false
println "x value: $it.value"
return true // stop searching
O con parámetros explícitos:
mymap.find key,value ->
(key != "likes") return false
println "x value: $value"
return true // stop searching
Aquí tienes las comentarios y calificaciones
Recuerda que puedes dar recomendación a esta reseña si te fue útil.