$collection.flatMap($func)
Wendet die Funktion func auf jedes Element der Collection collection an und glättet die Ergebnisse zu einer einzigen Collection zusammen. Wenn die Funktion für ein Element eine Collection zurückgibt, werden alle Elemente dieser Collection zum Ergebnis hinzugefügt. Wenn die Funktion einen einzelnen Wert zurückgibt, wird dieser Wert direkt zum Ergebnis hinzugefügt.
Dies ist äquivalent zu collection.map($func).flatten(), aber effizienter, da keine Zwischen-Collections erstellt werden.
| Name | Typ | Beschreibung | Pflicht | Default |
|---|---|---|---|---|
| collection | Collection | Die Eingabecollection, deren Elemente transformiert werden sollen. | ja | |
| func | Funktion | Die Funktion, die auf jedes Element angewendet wird. Die Funktion kann entweder eine Collection oder einen einzelnen Wert zurückgeben. | ja |
Typ: Collection
Eine flache Collection mit den transformierten Elementen.
list(1, 2, 3)
.flatMap(x -> list($x, $x * 10))
Ausgabe: [1, 10, 2, 20, 3, 30]
Für jede Zahl werden sowohl die Originalzahl als auch das 10-fache in die Ergebnisliste aufgenommen.
list(
list(1, 2, 3),
list(4, 5),
list(6, 7, 8, 9)
).flatMap(sublist -> $sublist.filter(x -> $x % 2 == 0))
Output: [2, 4, 6, 8]
Die verschachtelten Listen werden gefiltert, um nur gerade Zahlen zu erhalten, dann werden alle Ergebnisse zu einer flachen Liste zusammengeführt.
// Statt
list(1, 2).map(x -> list($x, $x * 2)).flatten()
// Besser
list(1, 2).flatMap(x -> list($x, $x * 2))
Vorteil: Die flatMap-Variante ist effizienter, da keine temporäre Liste von Listen erstellt wird.