Java8-Methode verwendete Referenz als Objekt Funktion, die Funktionen zu kombinieren
Gibt es eine Möglichkeit in Java8 die Methode Referenz als Function
- Objekt, mit dessen Methoden, so etwas wie:
Stream.of("ciao", "hola", "hello")
.map(String::length.andThen(n -> n * 2))
Diese Frage ist nicht im Zusammenhang mit der Stream
, es dient nur als Beispiel, ich möchte eine Antwort über die Methode Referenz
- Bieten die Eingabe und die gewünschte Ausgabe, danach wird Ihnen sagen, wie zur Umsetzung mit Java-8-streams.
- Es ist nicht im Zusammenhang mit Stream-API, seine im Zusammenhang mit Verfahren Referenz
- die kanonische Lösung ist
.map(s -> s.length() * 2)
wie es keinen Grund gibt, um es auszudrücken, wie die zwei Funktionen miteinander zu kombinieren, Sie sofort. Wenn Sie eine bereits vorhandeneFunction
Instanz oder wollen, halten Sie mindestens eine von Ihnen später wieder zu verwenden, das problem nicht existieren, dann müssen Sie ein Objekt aus, das Sie aufrufen können entwederandThen
odercompose
auf. In allen anderen Fällen, gibt es keinen Grund, es zu tun, die kompliziert sind.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Schreiben Sie eine statische Methode, dies zu tun:
Könnte man dann steckte es in eine utility-Klasse und importieren Sie Sie statisch.
Alternativ erstellen Sie eine einfachere statische Methode, die nur liefert die Funktion ist gegeben, für das wohl der compiler wissen, was Sie tun:
fn(Stream::length)
)String::length
werden an eine Methode übergeben, die akzeptiert eineFunction
? Funktionen akzeptieren parameter und einen Wert zurückgeben, wo, wie dielength
Methode nicht alles akzeptieren, während Sie gibt einen Wert zurück, wodurch es zu einerSupplier
. Kann sein das ich völlig falsch verstanden, wie die Methode Referenzen arbeitenKönnen Sie speichern Sie ihn einfach in eine variable:
Verwenden oder verwenden Sie einen Gips, aber es ist weniger gut lesbar IMO:
Sollten Sie in der Lage sein zu erreichen, was Sie wollen inline-durch die Verwendung von casts:
Gibt es nur 'geben Tipps' für den compiler, so dass Sie nicht wirklich 'Stimmen' das Objekt und nicht den overhead einer tatsächlichen Besetzung.
Alternativ können Sie verwenden eine lokale variable, die für die Lesbarkeit:
Einen Dritten Weg, der möglicherweise mehr prägnant ist mit eine utility-Methode:
Bitte beachten Sie, dass dies nicht getestet, also weiß ich nicht, ob Typrückschluss funktioniert korrekt in diesem Fall.
Können Sie auch
Das problem ist, dass
String::length
ist nicht unbedingt einFunction
; es können entsprechen viele funktionale Schnittstellen. Es muss in einem Kontext verwendet werden, bietet Ziel-Typ, und der Kontext sein könnte, Zuweisung, Methodenaufruf, Gießen.Wenn
Function
könnte eine statische Methode, die nur im Interesse der Ziel-Eingabe, könnten wir tun,Ich zum Beispiel verwende diese Technik in eine funktionale Schnittstelle
Können Sie einen cast
Drucke
Könnten Sie schreiben:
Stream
API...Wir können
reduce
- Funktion zur Kombination von mehreren Funktionen in einem.Ausgabe: