with
Syntax
$input.with($func)
Beschreibung
Wendet die Funktion func auf den gesamten Eingabewert input an und gibt das Ergebnis dieser Funktion zurück. Im Gegensatz zu map() oder foreach(), die eine Funktion auf jedes Element einer Menge anwenden, wendet with() die Funktion auf das komplette Ergebnis des vorherigen Ausdrucks in der Kette an.
Dies ermöglicht es, das Ergebnis eines komplexen Ausdrucks mehrfach zu verwenden, ohne die Kette unterbrechen oder den Ausdruck in einen Block umbauen zu müssen. Die Funktion func erhält das gesamte Ergebnis als Argument und kann darauf beliebig zugreifen.
Parameter
| Name | Typ | Beschreibung | Pflicht | Default |
|---|---|---|---|---|
| input | Beliebig | Der Eingabewert, der vollständig an die Funktion übergeben wird. Dies ist typischerweise das Ergebnis des vorherigen Ausdrucks in einer Methodenkette. | ja | |
| func | Funktion | Die Funktion, die auf den gesamten Eingabewert angewendet werden soll. Diese Funktion erhält einen Parameter (den Eingabewert) und kann diesen mehrfach verwenden. | ja |
Rückgabewert
Typ: Beliebig
Das Ergebnis der Auswertung der Funktion func. Der Rückgabetyp hängt davon ab, was die Funktion func zurückgibt.
Beispiele
Berechnung von Statistiken auf einer Liste
list(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 15, 20, 25, 30)
.filter(x -> $x > 5)
.with(largeNumbers -> {
"count": $largeNumbers.size(),
"sum": $largeNumbers.sum(),
"average": $largeNumbers.sum() / $largeNumbers.size(),
"min": $largeNumbers.min(),
"max": $largeNumbers.max(),
"doubled": $largeNumbers.map(x -> $x * 2)
})
Ausgabe: Ein Objekt mit den berechneten Statistiken: {count=9.0, sum=130.0, average=14.444444444444445, min=6.0, max=30.0, doubled=[12.0, 14.0, 16.0, 18.0, 20.0, 30.0, 40.0, 50.0, 60.0]}.
Bedingte Verarbeitung
$data
.filter(item -> $item.equals("active"))
.with(activeItems ->
if($activeItems.size() > 0,
{"status": "success", "data": $activeItems},
{"status": "empty", "message": "Keine aktiven Einträge gefunden"}
)
)
Ausgabe: Je nach Ergebnis entweder ein Erfolg-Objekt mit den aktiven Einträgen oder ein Meldungsobjekt, wenn keine aktiven Einträge gefunden wurden.
Transformation mit Referenz auf das Original
$customers
.filter(c -> $c["orders"].size() > 5)
.with(topCustomers -> {
"customers": $topCustomers,
"summary": "Top-Kunden: " + $topCustomers.size() + " Kunden mit mehr als 5 Bestellungen",
"averageOrders": $topCustomers.map(c -> $c["orders"].size()).sum() / $topCustomers.size()
})
Ausgabe: Ein Objekt, das sowohl die gefilterten Kundenliste enthält als auch eine Zusammenfassung und berechnete Durchschnittswerte basierend auf diesen Kunden.