0

次のマップが定義されています

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)
4

1 に答える 1

1

もしかしてこんな?

Map1.Exceptions.Exception += Map2.Exceptions.Exception
print Map1

出力:

[Rate:0, Exceptions:[Exception:[[Code:5, Message:Error], [Code:65, Message:Error], [Code:35, Message:Error], [Code:6, Message:Error], [Code:25, Message:Error], [Code:15, Message:Error]]]]
于 2013-02-13T21:27:04.630 に答える