次のマップが定義されています
def Map1 = [
Rate: 0,
Exceptions: [ Exceptions: [ [:] ]
]
def Map2 = [
Exceptions: [Exceptions: [ [:] ] ]
]
Map1 にはすでにデータがあります
Map1 = [
Rate: 0,
Exceptions: [
Exception: [
[Code: 5, Message: "Error"],
[Code: 65, Message: "Error"],
[Code: 35, Message: "Error"]
]
]
]
Map2をMap1に追加したい
Map2 = [
Exceptions: [
Exception: [
[Code: 6, Message: "Error"],
[Code: 25, Message: "Error"],
[Code: 15, Message: "Error"]
]
]
]
私はできることを知っています
Map2.Exceptions.Exception.each{ Exception ->
Map1.Exceptions.Exception.add(Exception)
}
しかし、Groovyにそれをさせる方法はありますか? すなわちMap1.merge(Map2)
編集:合併を処理するためのメタクラスメソッドを作成しました。これは再帰的であり、既に存在するマップ/リスト以外の変数は処理しませんが、必要なことは実行します。
Map.metaClass.Merge = { Map Source ->
Map Destination = delegate
Source.keySet().each{ key ->
if(Destination.keySet().contains(key)){
if(!(Source[key] instanceof Map)){
if(Source[key] instanceof List){
Source[key].each{ Value ->
Destination[key].add(Value)
}//Source[Key].each
}//if(Source[key] instanceof List)
}//if(!(Source[key] instanceof Map))
else{
Destination[key].Merge(Source[key])
}//else(!(Source[key] instanceof Map))
}//if(Destination.keySet().contains(key))
else{
Destination[key] = Source[key]
}//else(Destination.keySet().contains(key))
}//Source.keySet().each
}//Map.metaclass.Merge(Map Source)