Groovy:用修改后的值替换列表中的所有值

Groovy:用修改后的值替换列表中的所有值,groovy,Groovy,我有一个包含值列表的映射。我需要用该值的编码/加密版本更新所述列表中的每个值 地图和列表可以嵌套在任何地方,而我只是得到了一个要更改的路径。例如myMap.myList.*myObject 我的列表地图如下所示: mymap {"myList" : [{myObject : "aaa" }, {myObject : "bbb"}]} 我被赋予以下路径:'myList*myObj' 尝试和更新值的代码: myMap = [myList : [[myObject : "aaa"], [

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

地图和列表可以嵌套在任何地方,而我只是得到了一个要更改的路径。例如
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'替换所有值,但是我需要将每个值替换为其原始值的加密版本,即'aaa'替换为'aaa'的加密版本,将'bbb'替换为'bbb'的加密版本,依此类推

但这会将所有值设置为相同的值。如何将这些值设置为不同的值

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

println myMap
这可以创建一个全大写的版本-因此,如果您有加密(blah)功能,您可以执行以下操作:

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

我确信它可以被清理

你能把你尝试过的实际示例输入映射和代码,而不是伪代码吗?更新以包含示例。嗯,第二行可能会更改为myMap[“myList”]=行的其余部分,并将其减少为一行我相信路径是可变的;不清楚这个问题是具体的还是概括的。“地图和列表可以嵌套在任何地方,而我只是得到了一条改变的路径。”如果他知道路径,那就很容易了。其中的任何内容都可以调整-myMap[“${pathToList}”]=myMap[“${pathToList}”]。collect{[“${objectName}”:encrypt(it.${objectName}”)]}-或类似的变量谢谢,但正如Michael所说,我刚刚得到了一条路径,那么,我将如何确定列表的深度,以确定在何处添加“收集”等。您能给出一个路径示例吗?如果是我-我会使用路径来获取列表-如答案中所示-更改t,然后使用路径将列表替换为原始位置。