添加到Groovy中的地图

时间:2016-11-30 04:39:33

标签: groovy

在groovy中我得到了以下内容......

    def response = [
        modifications: []
    ]

我想动态地添加到这个地图,以便最终像这样....

    def response = [
        modifications: [
            userKnown :[
                type: 'Boolean',
                value: userKnown?.toBoolean()
            ]
        ]
    ]

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

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

但我并没有完全理解我所追求的目标。有人可以帮我解决我做错的事。

感谢

1 个答案:

答案 0 :(得分:2)

在给定的示例中,您正在混合两件事。当您使用modifications时,地图中的List类型为[],而您希望代之以Map。要以这种方式实例化地图,您必须使用[:]

def response = [
    modifications: [:]
]

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

response.modifications << userKnown

assert response == [modifications: [userKnown: [type: 'Boolean', value: true]]]

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