假设我有以下结构:
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 ]