​Syntax

$collection.flatMap($func)

Beschreibung

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.

Parameter

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

Rückgabewert

Typ: Collection

Eine flache Collection mit den transformierten Elementen.

Beispiele

Mehrere Werte pro Element erzeugen

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.

Listen zusammenführen

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.

Vergleich mit map().flatten()

// 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.