2016-04-09 4 views
1

Я хочу иметь список поиска, который возвращает найденное значение в скобках, если найден или возвращает пустую строку. Я не хочу использовать перечисление.Groovy получает значение карты для элемента и возвращает с круглой скобкой, если найдено else blank

Как это:

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

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

Но я хочу сделать это проще и устранить строке «DEF S», так что есть какая-то собрать на конце ГЭТ (это), и все это на одна линия. Я могу сделать Элвиса, но не ставит()

Я могу даже сделать мета-программирования, таких как:

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

и затем просто сделать

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

Там должны быть a вид

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

но это не работает.

ответ

3

Вот способ сделать это в одной строке:

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

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

Отлично, это то, что я искал. Метод «с» - это точно ответ. Btw Я изначально использовал [it], но изменил на .get (it), поскольку он более читаем другие. –

1

Вы можете указать значение по умолчанию при вызове get.

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

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

Мне нравится это решение лучше – GLaDOS

+0

Джефф Я предпочел ответ Эммануэля, поскольку он пропустил ключевое требование, которое есть - если его найти в скобках - т. Е. (Digital Things), иначе просто верните пустую строку. Но приятно, поскольку я не понял, что вы можете получить результат по умолчанию. –