choff
Returning Observer

Liste von Listen zusammenfassen in Template

Jump to solution

Hallo,

in einem Template habe ich eine Liste von Listen set_listOfLists erzeugt und würde diese gern zu einer Liste set_listAll zusammenfassen, also die Elemente aller dieser Listen hintereinander hängen in eine große Liste.

Bis jetzt mache ich es so:

$CMS_SET(set_listAll, [])$

$CMS_FOR(for_list, set_listOfLists)$

     $CMS_SET(void, set_listAll.addAll(for_list))$

$CMS_END_FOR$

Geht das irgendwie kürzer, z.B. durch Operationen direkt auf set_listOfLists mit Javas flatMap?

Viele Grüße,

Christian

0 Kudos
1 Solution

Accepted Solutions
mbergmann
Crownpeak employee

Hallo Christian,

mit .flatMap geht es nicht (da kann man die nötigen Objekte nicht erzeugen/übergeben).

Was aber genauso einfach geht ist die Nutzung von .fold():

$CMS_SET(set_listOfLists, [["A", "B"], ["C", "D"], ["X", "Y", "Z"]])$ $-- Beispiel-Eingabe --$

$CMS_SET(set_result, set_listOfLists.fold(s:[], x->s.add(x)))$

set_result beinhaltet dann die um eine Ebene "flachere" Liste.

Grund hierfür ist, dass es in der Template-Syntax eine separate "Spezialimplementierung" von List.add(List) gibt, die wie ein .addAll(Collection) funktioniert - aber im Unterschied zu diesem die ergänzte Liste als Ergebnis zurückliefert (im Gegensatz zu boolean bei addAll).

Siehe auch hier.

Viele Grüße

Michael

View solution in original post

0 Kudos
2 Replies
mbergmann
Crownpeak employee

Hallo Christian,

mit .flatMap geht es nicht (da kann man die nötigen Objekte nicht erzeugen/übergeben).

Was aber genauso einfach geht ist die Nutzung von .fold():

$CMS_SET(set_listOfLists, [["A", "B"], ["C", "D"], ["X", "Y", "Z"]])$ $-- Beispiel-Eingabe --$

$CMS_SET(set_result, set_listOfLists.fold(s:[], x->s.add(x)))$

set_result beinhaltet dann die um eine Ebene "flachere" Liste.

Grund hierfür ist, dass es in der Template-Syntax eine separate "Spezialimplementierung" von List.add(List) gibt, die wie ein .addAll(Collection) funktioniert - aber im Unterschied zu diesem die ergänzte Liste als Ergebnis zurückliefert (im Gegensatz zu boolean bei addAll).

Siehe auch hier.

Viele Grüße

Michael

0 Kudos
choff
Returning Observer

Danke, Michael, funktioniert einwandfrei!

0 Kudos