Erstellen Sie eine Methode, die eine variable Länge von Funktionsargumenten mit möglicherweise unterschiedlichen Typen akzeptiert

8

Angenommen, ich habe eine Zeichenfolge: String s = "1,2,3,4,5,6" . Ich möchte eine Methode combineFunctions() erstellen, die eine Sequenz variabler Länge von Function s als Argument nehmen und alle Operationen in dieser Reihenfolge anwenden würde.

Die Funktionen können verschiedene <T,U> -Typen haben.

Beispielverwendungen einer solchen Funktion wären die folgenden:

%Vor%

Was ich versucht habe (das <U> hier ist hier nicht sehr hilfreich):

%Vor%

Aber ich bin fest daran, den letzten Typ von Function s zu bekommen. Ich habe auch über einen rekursiven Ansatz nachgedacht, aber der Parameter varargs muss der letzte sein.

Wäre es möglich, eine solche Methode in Java zu implementieren?

    
syntagma 21.10.2015, 12:42
quelle

2 Antworten

3

Das Problem mit einer solchen Funktion besteht darin, dass Sie alle Kompilierzeit-Typprüfungen verlieren und Casting notwendig ist.

Dies wäre eine Implementierung, die andThen verwendet, um Funktionen miteinander zu kombinieren. Das sieht hässlich aus wegen dem ganzen Casting und ich bin mir nicht sicher, ob du es richtiger machen kannst. Beachten Sie auch, dass dies die Erstellung von 2 Stream-Pipelines erfordert, wenn nur 1 wirklich notwendig ist.

%Vor%

Um den Code in Ihrer Frage zu finden, könnten Sie ihn wie folgt in eine Klasse einfügen:

%Vor%     
Tunaki 21.10.2015, 12:59
quelle
3

Das Beispiel in Ihrer Frage lässt sich recht einfach mit dem Funktionsstil Streams . Der "funktionale" Ansatz zur Lösung dieses Problems besteht darin, Sequenzen von map -Operationen zu verwenden, wobei jeder Schritt die Elemente in einen anderen Typ transformiert und dann optional das Ergebnis reduziert / sammelt.

Zum Beispiel

%Vor%

Das gleiche Muster würde für andere Arten von "Funktionskombinationen" gelten.

    
NilsH 21.10.2015 13:11
quelle