2016-11-30 5 views
0

In groovy Karte Ich habe folgendes bekam ...hinzufügen in Groovy

def response = [ 
     modifications: [] 
    ] 

ich zu dieser Karte dynamisch hinzugefügt werden soll, so dass es sich wie das endet ....

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

ich habe versucht, das zu tun, diesen Code unter Verwendung von ...

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

Aber ich am Ende nicht ganz mit dem, was ich bin nach. Kann mir jemand bei dem helfen, was ich falsch mache?

dank

+0

Sie können dies erreichen, indem Sie einfach Java verwenden. Erstellen Sie eine Karte sagen x und setzen Sie Typ und Wert in dieser Karte und fügen Sie dies in einer Liste sagen userKnown und erstellen Sie dann eine Karte und fügen Sie diese userKnown in userKnownVariable. Das ist es. –

Antwort

2

Sie mischen zwei Dinge im gegebenen Beispiel. modifications in Ihrer Karte ist der Typ List, wenn Sie [] verwenden und Sie erwarten, stattdessen eine Map haben. Instanziieren diese Weise wird eine Karte, die Sie haben verwenden [:]

def response = [ 
    modifications: [:] 
] 

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

response.modifications << userKnown 

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

Eine Sache, erwähnenswert. Erwägen Sie in Ihrem Beispiel die Verwendung von List. Das Hinzufügen neuer Schlüssel zu einer Karte mag in einigen Fällen sinnvoll sein, obwohl es ein signifikantes Problem gibt - die Reihenfolge jedes Schlüssels in modifications ist nicht deterministisch, sondern hängt von der Kartenimplementierung ab (HashMap, TreeMap usw.). Aus Sicht der Geschäftslogik sieht es so aus, als würden Sie versuchen, Informationen über alle Änderungen zu erhalten, die angewendet/hinzugefügt wurden. List in diesem Fall wäre eine bessere Option - Sie können die Reihenfolge verfolgen, in der jede Änderung angewendet wurde und wenn Sie diese Antwort auf der Frontend-Seite verwenden - es wird einfacher sein, über eine Liste zu iterieren und jedes Ergebnis anzuzeigen.