Wirf jede Karte in einen benutzerdefinierten Typ - groovy

Ich versuche einen Weg zu finden, zu wirken irgendein Karte zum Beispiel meiner Klasse EIN mit "as" operator.in Groovy, so:

import java.util.concurrent.ConcurrentHashMap;
class A {
def list = new ArrayList();
A( Map map ) {
for( e in map.entrySet() ) {
list.add( e.getKey );
list.add( e.getValue() );
}
}
};
def map = [ key1 : "value1", key2 : "value2" ] as ConcurrentHashMap;
def instA = map as A;
assert instA.list.containsAll( [ "key1", "value1", "key2", "value2" ] );

Dies ist ein hypothetisches Beispiel, aber es zeigt das Wesen des Problems.

Antworten:

1 für die Antwort № 1

Sobald ich Ihre Tippfehler in der Frage korrigiert habe (und die for-Schleife durch eine groovigere Lösung ersetzt habe), scheint dies zu funktionieren:

import java.util.concurrent.ConcurrentHashMap;

class A {
def list
A( Map map ) {
list = map.inject([]) { l, key, value -> l << key << value }
}
}

def map = [ key1 : "value1", key2 : "value2" ] as ConcurrentHashMap
def instA = map as A

assert instA.list == [ "key1", "value1", "key2", "value2" ]

Speisekarte