入れ子のマップから平坦化されたマップを取得したいと思います。フラット化されたマップには、キーで区切られたキーが必要です。例えばgroovyの入れ子になったマップから1次元のマップを返します
、
def map = ['environment':'production', 'classes':['nfs-server':['exports':['/srv/share1', '/srv/share3']]], 'parameters':'null']
予想される出力は、私は周りを見回したと再帰を使用して、次のコードスニペットを思い付いた
[environment:'production', classes.nfs-server.exports:['/srv/share1', '/srv/share3'], parameters:'null']
です。ここでは、コード
def Map<String, String> getNestedMapKeys(Map map, String keyPrefix = '') {
def result = [:]
map.each { key, value ->
if (value instanceof Map) {
result += getNestedMapKeys(value, keyPrefix += "$key.")
} else {
String finalKey = "$keyPrefix$key"
// need to wrap in parenthesis because it's a variable
result << [(finalKey): value]
}
}
result
}
があり、それを実行しているからの出力は
[environment:'production', classes.nfs-server.exports:['/srv/share1', '/srv/share3'], classes.parameters:'null']
だから、ネストされたマップの後に処理されたキーは、まだ接頭辞を保持していますさ。この場合、 'classes.parameters'は単に 'parameters'でなければなりません。それを修正するための助けに感謝します。ありがとう。