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')}"
Другие вопросы по тегам