需要修改Groovy映射中的键列表

需要修改Groovy映射中的键列表,groovy,Groovy,我需要修改下面给定映射中的键值 例如: 需要修改键值,我的最终映射应如下所示: Map map= ["modifiedkey":["name":"x", "age":"22"],"someanotherkey":["name":"y", "age":"12"]] 您可以从以下位置使用collectEntries方法: 在上面的示例中,我使用了定义转换的闭包——它需要从当前映射条目键获取单个字符串参数。正如您所看到的,Groovy中的闭包是第一类公民,所以我们可以将它作为一个值在map中传递。

我需要修改下面给定映射中的键值 例如:

需要修改键值,我的最终映射应如下所示:

Map map= ["modifiedkey":["name":"x", "age":"22"],"someanotherkey":["name":"y", "age":"12"]] 

您可以从以下位置使用
collectEntries
方法:

在上面的示例中,我使用了定义转换的
闭包
——它需要从当前映射条目键获取单个
字符串
参数。正如您所看到的,Groovy中的闭包是第一类公民,所以我们可以将它作为一个值在map中传递。对于这个示例,我创建了
转换
映射,它定义了从旧键到新键的映射。我还创建了
defaultTransformation
closure-如果给定键的
transformations
map中的映射不存在,将使用它

运行以下脚本将生成类似以下脚本的
newMap

[DCBA:[name:x, age:22], ZYX:[name:y, age:12], unchanged:[name:a, age:20]]
如你所见:

  • abcd
    键是使用
    basicTransformation
    close转换的
  • xyz
    键也使用
    basicTransformation
    closure进行了转换
  • 未更改
    键保持不变,因为在
    转换中没有定义映射
    映射,并且使用了默认映射-一个按原样返回键的闭包

我希望能有所帮助。

您好,谢谢您的回答,我需要动态修改按键,比如需要获取旧按键“abcd”,并使用以下功能更改按键(例如:trim或substring,此键应为map@Raju感谢您提供更多详细信息。我已经更新了我的答案,支持使用Groovy闭包定义转换函数。@Raju请将这些要求添加到问题中。从现在开始,它看起来像是您想要一个简单的映射。@Raju没有我们能帮你解决问题吗?还有什么我们能帮你的吗?
def defaultTransformation = { String key -> key }
def basicTransformation = { String key -> key.toUpperCase().reverse()
Map transformations = [abcd: basicTransformation, xyz: basicTransformation]

Map map= ["abcd":["name":"x", "age":"22"],"xyz":["name":"y", "age":"12"], "unchanged": ["name": "a", "age": "20"]]

Map newMap = map.collectEntries { [(transformations.getOrDefault(it.key, defaultTransformation).call(it.key)): it.value] }
[DCBA:[name:x, age:22], ZYX:[name:y, age:12], unchanged:[name:a, age:20]]