需要修改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]]