2016-05-16 47 views
1

我有一个包含值列表的映射。我需要用该值的编码/加密版本更新所述列表中的每个值。Groovy:用修改后的值替换列表中的所有值

地图和列表可以嵌套在任何地方,我只是给出了要改变的路径。例如myMap.myList.*myObject

我列出的地图是这样的:

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

我给出的这个路径:'myList*myObj'

代码,试图更新值:

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

该作品并用'somenewvalue'替换所有的值然而,我需要用它的原始值So的加密版本来替换每个值, 'aaa'和'bbb'的加密版本'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 

本工程以创建全部大写版本 - 所以,如果你有加密(等等)的功能,你可以这样做:

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

我敢肯定,它可以被清理

+0

嗯第二行可能可以改为myMap [“myList”] =其余行,并将其减少到一行 –

+0

我相信路径是可变的;目前还不清楚这个问题是具体还是一般化的。 “地图和列表可以嵌套在任何地方,我只是给了一个改变的路径” –

+0

如果他知道路径,那就够简单了。任何可以调整的东西 - myMap [“$ {pathToList}”] = myMap [“$ {pathToList}”]。collect {[“$ {objectName}”:encrypt(it。“$ {objectName}”)]} - 或者一些这样的变化 –