Liste von Listen zusammenfassen in Template
Author: choff
Publication Date: 9/10/2018 10:30
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
-
Author: mbergmann - 9/10/2018 12:34
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 -
Author: choff - 9/10/2018 14:04
Danke, Michael, funktioniert einwandfrei!
0
Bitte melden Sie sich an, um einen Kommentar zu hinterlassen.
Kommentare
2 Kommentare