Keys in Maps austauschen

Hallo,
ich suche gerade nach einer Möglichkeit Keys in einer Map auszutauschen:

Map A: „1=schwarz;2=rot;3=lila“
Map B: „2=50;3=100“

Ergebnis Map: „1=schwarz;50=rot;100=lila“

Habt Ihr da eine geschickte Idee? Ich bin bisher nur auf ziemlich umständliche Konstrukte gekommen.
Ich nehme an das es in Freemarker mächtige Befehle gibt, die ich einfach nicht finde.

Gruß Dirk

Hallo Dirk,

eine einfache Lösung um die Keys einer Map zu ändern ist mir leider auch nicht bekannt. Vermutlich musst du mit einer List Anweisung über alle Keys der Map A laufen und prüfen ob in Map B dafür ein Wert vorhanden ist:

Beispiel:

<#assign mapB = parseMap(result['MapB']!) /><#list parseMap(result['MapA']!) as key,value><#if mapB[key]! != "">${mapB[key]}<#else>${key!}</#if>=${value}<#sep>;</#list>

Viele Grüße
Torsten

1 „Gefällt mir“

Also unter der Annahme, dass die zweite Map B immer gewinnen soll könnte man folgendes machen:

${parseMap("1=schwarz;2=rot;3=lila;2=50;3=100")}
Ergebnis: {1=schwarz, 2=50, 3=100}

Oder als Mapper mit Spalten:

a: 1=schwarz;2=rot;3=lila
b: 2=50;3=100

${parseMap(result['a'] + ";" + result['b'])}

Beispiel

Idee ist: man hängt beide „String“ Maps erstmal zusammen und übergibt sie dann an die parseMap() Funktion. parseMap() arbeitet das von links nach rechts ab. D.h. Werte weiter rechts überschreiben vorherige Werte.

1 „Gefällt mir“

Hallo Thorsten,
vielen Dank!
Beide Lösungen könnten zum Einsatz kommen, wobei Lösung 1 die für mich bessere Lösung ist.