2016-05-16 4 views
1

私は値のリストを含むマップを持っています。そのリストのすべての値をその値のコード化/暗号化バージョンで更新する必要があります。Groovy:リスト内のすべての値を変更した値に置き換えます。

マップとリストはどこにでもネストすることができ、私は何を変更するかのパスが与えられています。例えばmyMap.myList.*myObject

リストの私のマップは次のようになります。

 myMap = [myList : [[myObject : "aaa"], [myObject : "bbb"]]]; 
    path = 'myList*.myObject'; 
    result = Eval.x(myMap, 'x.' + path + '="somenewvalue"'); 

この作品:値を試してみて、更新する'myList*myObj'

コード:私はこのパスに与えられています

mymap {"myList" : [{myObject : "aaa" }, {myObject : "bbb"}]} 

すべての値を 'somenewvalue'に置き換えます。ただし、各値を元の値の暗号化されたバージョンに置き換える必要があります。つまり、aaaとenc 'bbb'などの暗号化されたバージョンで、 'aaa'と 'bbb'の暗号化されたバージョンです。

しかし、これはすべての値を同じ値に設定します。どのように私は異なるものに値を設定できますか?

+0

クリーンアップすることができ確信しています擬似コードではなく、試した実際の入力マップとコードを入れます。 –

+0

が含まれています。 –

答えて

1
def myMap = ["myList" : [[myObject : "aaa" ], [myObject : "bbb"]]] 
    def theList = myMap["myList"].collect { [myObject: it.myObject.toUpperCase()]} 
    myMap["myList"] = theList 

println myMap 

これは、すべて大文字でバージョンを作成するために動作します - ので、あなたが行うことができます(何とか)機能を暗号化している場合:CAN

def myMap = ["myList" : [[myObject : "aaa" ], [myObject : "bbb"]]] 
    def theList = myMap["myList"].collect { [myObject: encrypt(it.myObject)]} 
    myMap["myList"] = theList 

を、私はそれが

+0

2番目の行はおそらくmyMap ["myList"] =残りの行に変更して1行に減らすことができます –

+0

私はパスが可変であると信じています。質問が具体的であるか一般化されているかは不明です。 「マップとリストはどこにでも入れられ、私は何を変えるべきかの道を与えられているだけです」 –

+0

パスを知っていれば十分に簡単です。 myMap ["$ {objectName}")}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} - またはそのようなバリエーション –

関連する問題