2016-04-09 10 views
1

Ich möchte eine Lookup-Liste, die den gefundenen Wert in Klammern zurückgibt, wenn gefunden, oder sonst leere Zeichenfolge zurückgeben. Ich möchte keine Enum verwenden.Groovy get map Wert für das Element und return mit Klammern, wenn sonst leer gefunden

So:

def grt = { ['mail': 'Scanned Paper', 'digital': 'Digital Things', 'barcode': 'Some Barcode Matter'].get(it) } 

def s = grt('digital') ? "($grt('digital')" : '' 
println "Report $s" 

Aber ich will es einfacher machen und die Beseitigung des ‚def s‘ Linie, so dass es eine Art ist am Ende get sammeln von (es) und es ist alles auf eine Linie. Ich kann ein elvis tun, aber das ist nicht gesetzt()

Ich kann sogar Meta-Programmierung tun, wie:

Object.metaClass.prettyString = { delegate ? "($delegate)" : '' } 

und dann einfach tun müssen

println "Report $grt('digital').prettyString()" 

Es muss sein eine Art

.get(it).collect { it ? "($it)" : '' } 

aber das funktioniert nicht.

Antwort

3

Hier ist ein Weg, um es in einer Zeile zu tun:

def grt = { 
    [ 
     'mail': 'Scanned Paper', 
     'digital': 'Digital Things', 
     'barcode': 'Some Barcode Matter' 
    ][it].with { 
     delegate ? "($delegate)" : '' 
    } 
} 

println "Report ${grt('digital')}" 
+0

Perfekt, das ist, was ich gesucht habe. Die 'mit' Methode ist genau die Antwort. Übrigens habe ich ursprünglich [it] verwendet, bin aber zu .get (it) gewechselt, da es für andere besser lesbar ist. –

1

Sie einen Standardwert bereitstellen kann, wenn get aufrufen.

def grt = { 
    [ 
     'mail': 'Scanned Paper', 
     'digital': 'Digital Things', 
     'barcode': 'Some Barcode Matter' 
    ].get(it, '') 
} 

println "Report ${grt('digital')}" 
+0

Ich mag diese Lösung besser – GLaDOS

+0

Jeff Ich bevorzugte Emmanuel's Antwort, da es die Schlüsselanforderung verpasste, die - wenn gefunden, in Klammern - d. H. (Digital Things), ansonsten nur eine leere Zeichenfolge zurückgeben. Aber schön, da ich nicht wusste, dass du ein Standardresultat bekommen kannst. –