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

时间:2016-05-16 21:26:55

标签: 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'取代所有值。但是,我需要将每个值替换为其原始值的加密版本。所以' aaa'使用加密版本的' aaa'和' bbb'使用加密版本的' bbb'等等。

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

1 个答案:

答案 0 :(得分:1)

    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

我确信它可以清理