Groovy получить значение карты для элемента и вернуть с круглыми скобками, если найдено еще пустым
Я хочу иметь список поиска, который возвращает найденное значение в круглых скобках, если найдено, или возвращает пустую строку. Я не хочу использовать enum.
Как это:
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', чтобы в конце get (it) был какой-то сбор, и все было в одной строке. Я могу сделать Элвиса, но не ставит ()
Я даже могу сделать метапрограммирование, такое как:
Object.metaClass.prettyString = { delegate ? "($delegate)" : '' }
а потом надо просто сделать
println "Report $grt('digital').prettyString()"
Там должно быть своего рода
.get(it).collect { it ? "($it)" : '' }
но это не работает
2 ответа
Решение
Вот способ сделать это в одной строке:
def grt = {
[
'mail': 'Scanned Paper',
'digital': 'Digital Things',
'barcode': 'Some Barcode Matter'
][it].with {
delegate ? "($delegate)" : ''
}
}
println "Report ${grt('digital')}"
Вы можете указать значение по умолчанию при вызове get
,
def grt = {
[
'mail': 'Scanned Paper',
'digital': 'Digital Things',
'barcode': 'Some Barcode Matter'
].get(it, '')
}
println "Report ${grt('digital')}"