Search the FirstSpirit Knowledge Base
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
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
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
Danke, Michael, funktioniert einwandfrei!