在 Groovy 中添加到地图

Ric*_*hie 0 groovy

在 groovy 中,我有以下内容...

    def response = [
        modifications: []
    ]
Run Code Online (Sandbox Code Playgroud)

我想动态地添加到这张地图中,这样它就会像这样结束......

    def response = [
        modifications: [
            userKnown :[
                type: 'Boolean',
                value: userKnown?.toBoolean()
            ]
        ]
    ]
Run Code Online (Sandbox Code Playgroud)

我已经尝试使用下面的代码来做到这一点......

    if (userKnown){
        def userKnownVariable = [
            userKnown :[
                type: 'Boolean',
                value: userKnown?.toBoolean()
            ]
        ]
        response.modifications << userKnownVariable
    }
Run Code Online (Sandbox Code Playgroud)

但我并没有完全得到我所追求的。有人可以帮助我解决我做错了什么。

谢谢

Szy*_*iak 5

您在给定的示例中混合了两件事。modifications在您的地图中是List您使用时的类型,[]并且您希望有一个Map。要以这种方式实例化地图,您必须使用[:]

def response = [
    modifications: [:]
]

def userKnown = [
    userKnown: [
        type: 'Boolean',
        value: true
    ]    
]

response.modifications << userKnown

assert response == [modifications: [userKnown: [type: 'Boolean', value: true]]]
Run Code Online (Sandbox Code Playgroud)

值得一提的一件事。考虑List在您的示例中使用。添加新键映射可能听起来合理在某些情况下,虽然它有一个显著的问题-每一个键的顺序modifications是不确定的,它取决于地图的实现(HashMapTreeMap等等)。从业务逻辑的角度来看,您似乎正在尝试获取有关已应用/添加的所有修改的信息。List在这种情况下将是一个更好的选择 - 您可以跟踪应用每个修改的顺序,如果您在前端使用此响应 - 迭代列表并显示每个结果会更容易。