2016-07-20 5 views
2

Ich frage mich, ob und wo jemand die Aufgabe gemacht hat, eine Reihe von generischen funktionalen Schnittstellen zu definieren, um die Verwendung von Lambdas zu vereinfachen und zu standardisieren. Ich komme aus C#, wo die Kernbibliotheken die Aufgabe erfüllt haben.Gibt es in Java8 standardisierte generische funktionale Schnittstellen?

Ich las über "BiFunction" und fand es umständlich. Vor allem, wenn auf TriFunction erweitert usw.

ich kam mit dem folgenden:

public interface FI { 
@FunctionalInterface 
public interface Action<T> { 
    void invoke(T arg1); 
} 
@FunctionalInterface 
public interface Function0<TResult> { 
    TResult invoke(); 
} 
@FunctionalInterface 
public interface Function1<Targ1, TResult> { 
    TResult invoke(Targ1 arg1); 
} 
@FunctionalInterface 
public interface Function2<Targ1, Targ2, TResult> { 
    TResult invoke(Targ1 arg1, Targ2 arg2); 
} 
@FunctionalInterface 
public interface Function3<Targ1, Targ2, Targ3, TResult> { 
    TResult invoke(Targ1 arg1, Targ2 arg2, Targ3 arg3); 
} 
@FunctionalInterface 
public interface Function4<Targ1, Targ2, Targ3, Targ4, TResult> { 
    TResult invoke(Targ1 arg1, Targ2 arg2, Targ3 arg3, Targ4 arg4); 
} 
@FunctionalInterface 
public interface Function5<Targ1, Targ2, Targ3, Targ4, Targ5, TResult> { 
    TResult invoke(Targ1 arg1, Targ2 arg2, Targ3 arg3, Targ4 arg4, Targ5 arg5); 
} 
@FunctionalInterface 
public interface Function6<Targ1, Targ2, Targ3, Targ4, Targ5, Targ6, TResult> { 
    TResult invoke(Targ1 arg1, Targ2 arg2, Targ3 arg3, Targ4 arg4, Targ5 arg5, Targ6 arg6); 
} 
@FunctionalInterface 
public interface Function7<Targ1, Targ2, Targ3, Targ4, Targ5, Targ6, Targ7, TResult> { 
    TResult invoke(Targ1 arg1, Targ2 arg2, Targ3 arg3, Targ4 arg4, Targ5 arg5, Targ6 arg6, Targ7 arg7); 
} 
@FunctionalInterface 
public interface Function8<Targ1, Targ2, Targ3, Targ4, Targ5, Targ6, Targ7, Targ8, TResult> { 
    TResult invoke(Targ1 arg1, Targ2 arg2, Targ3 arg3, Targ4 arg4, Targ5 arg5, Targ6 arg6, Targ7 arg7, Targ8 atg8); 
} 
@FunctionalInterface 
public interface Function9<Targ1, Targ2, Targ3, Targ4, Targ5, Targ6, Targ7, Targ8, Targ9, TResult> { 
    TResult invoke(Targ1 arg1, Targ2 arg2, Targ3 arg3, Targ4 arg4, Targ5 arg5, Targ6 arg6, Targ7 arg7, Targ8 atg8, Targ9 arg9); 
} 
@FunctionalInterface 
public interface Function10<Targ1, Targ2, Targ3, Targ4, Targ5, Targ6, Targ7, Targ8, Targ9, Targ10, TResult> { 
    TResult invoke(Targ1 arg1, Targ2 arg2, Targ3 arg3, Targ4 arg4, Targ5 arg5, Targ6 arg6, Targ7 arg7, Targ8 atg8, Targ9 arg9, Targ10 arg10); 
} 

} 
+2

Es gibt nichts in der Standard-Java-Bibliothek genau so; am nächsten sind die Schnittstellen im Paket 'java.util.function'. – Jesper

+5

Nun ... Ihre 'Action' ist im Grunde' Consumer'. 'Funktion0' ist' Lieferant'. 'Funktion1' ist' Funktion'. 'Funktion2' ist' BiFunktion'. Der Rest ist wahrscheinlich von ziemlich begrenzter Nützlichkeit. Wenn Sie Funktionen mit 10 Parametern schreiben, gibt es wahrscheinlich bessere Möglichkeiten, sie zu schreiben. – khelwood

+0

Eine Funktion mit 10 Parametern sollte wahrscheinlich eine Klasse haben, um diese Werte zu umbrechen. –

Antwort

0

In Java 8 Offiziell gibt es nur vier Arten von Funktionen.

Consumer: Void function 
    Function: receive argument return argument 
    BiFunction: Receive 2 arguments return argument 
    Predicate: receive argument return boolean 

Hier können Sie einige Beispiele dazu sehen.

https://github.com/politrons/reactive/blob/master/src/test/java/stream/Functions.java

+0

Ja, das habe ich gefunden. –

+0

Prädikat erhält 1 Argument – user1121883

+0

yep Fehler, Aktualisierung, danke! – paul

0

Die nächsten Analoga Sie sind in der java.util.function Paket zu finden:

interface Function<T,R> { R apply(T t) } 

interface Consumer<T> { void accept(T t) } 

interface BiFunction<T,U,R> { R apply(T t, U u) } 

usw. Sie können Ihre eigenen definieren, oder Sie können einige in zB Google Guava oder anderen Bibliotheken finden .

2

javaslang [1] liefert Function0 - Function8 und sogar CheckedFunction0 - CheckedFunction8. Sie bieten sogar zusätzliche Funktionen wie "Memorization" und "Currying".

http://javaslang.io

Verwandte Themen