Saltar al contenido

Groovy: encontrar con seguridad un key en un mapa y devolver su valor

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-falseentonces 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-falseDeberí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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *