我需要簡單的地圖轉換與環境變量的代碼簡化普通的地圖轉換爲嵌套地圖
HOST_IDX :"192.168.99.100",
PORT_IDX_HTTPS:"9447",
HOST_ESB :"192.168.99.100",
PORT_ESB_HTTPS:"8245",
PORT_ESB_HTTP :"8282",
OTHER :"foo"
到嵌套的地圖,在JSON看起來是這樣的:
{
"idx": {
"host": "192.168.99.100",
"port": {
"https": "9447"
}
},
"esb": {
"host": "192.168.99.100",
"port": {
"https": "8245",
"http": "8282"
}
}
}
它下面的代碼,實際上這樣做,但我想盡量減少/簡化它...
def env=[
HOST_IDX:"192.168.99.100",
PORT_IDX_HTTPS:"9447",
HOST_ESB:"192.168.99.100",
PORT_ESB_HTTPS:"8245",
PORT_ESB_HTTP:"8282",
OTHER:"foo"
]
def x=env
.collectEntries{[it.key.toLowerCase().split('_'),it.value]}
.findAll{it.key[0] in ['host','port']}
.groupBy({it.key[1]}, {it.key[0]})
.collectEntries{[
it.key, it.value.collectEntries{[
it.key, it.key=='host' ? it.value.entrySet()[0].value : it.value.collectEntries{[
it.key[-1], it.value
]}
]}
]}
println new groovy.json.JsonBuilder(x).toPrettyString()
非常感謝。現在我知道一個新的方法:'inject' :) – daggett