Groovy:地图深度嵌套

dbr*_*rin 2 groovy

我有一个如下所示的地图矩阵:

def matrix = [
    field1:[role1:[state1:["f1r1s1",true],
                   state2:["f1r1s2",false]],
            role2:[state1:["f1r2s1",true],
                   state2:["f1r2s2",false]]
           ],
    field2:[role1:[state1:["f2r1s1",true],
                   state2:["f2r1s2",false]],
            role2:[state1:["f2r2s1",true],
                   state2:["f1r2s2",false]]
           ]
]
Run Code Online (Sandbox Code Playgroud)

我试图获得角色为"role1"且状态为"state1"的所有字段.简单?请帮忙.

win*_*n74 7

matrix.values().role1.state1
Run Code Online (Sandbox Code Playgroud)

适用于这种情况,因为你只有一个未知的搜索范围.


tim*_*tes 5

你可以做:

def map = matrix.inject([:]) { map, elem -> map << [ (elem.key): elem.value[ 'role1' ][ 'state1' ] ] }
Run Code Online (Sandbox Code Playgroud)

获得所需的结果:

[field1:[f1r1s1, true], field2:[f2r1s1, true]]
Run Code Online (Sandbox Code Playgroud)