在Groovy中展平嵌套地图

前端之家收集整理的这篇文章主要介绍了在Groovy中展平嵌套地图前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
假设我有以下结构:

Map<String,Map<String,Integer>> nestedMap = [
"x": ["a": 2,"b": 3,"c": 4],"y": ["a": 20,"b": 30,"c": 40],"z": ["a": 200,"b": 300,"c": 400]
]

我想要扁平化这个结构并得到:

[
"x-a" : 2,"x-b" : 3,"x-c" : 4,"y-a" : 20,"y-b" : 30,"y-c" : 40,"z-a" : 200,"z-b" : 300,"z-c" : 400
]

我怎样才能收集/收集电影等?

或者,正如您所看到的,值非常相似.所以我构建这个嵌套的地图结构的方法是通过运行for循环遍历[x,y,z]并将我的地图的enteries设置为等于遍历[a,b,c]和返回一张地图.有没有办法跳过这个嵌套结构并在大地图中功能性地附加元素?

解决方法

关于备选问题(并回应@damahapatro的评论),请考虑以下内容.

给出两个列表:

def list1 = ['x','y','z']
def list2 = ['a','b','c']

和一个给出适当值的函数f,然后我们可以使用inject(它会在迭代组合时累积一个映射(例如[x,a]):

def m = [list1,list2].combinations().inject([:]) { map,combo ->
    assert combo.size() == 2
    def a = combo[0]
    def b = combo[1]
    map["${a}-${b}" as String] = f(a,b)
    map
}

assert m == [
"x-a" : 2,"z-c" : 400
]

猜你在找的Groovy相关文章