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);
}
}
Es gibt nichts in der Standard-Java-Bibliothek genau so; am nächsten sind die Schnittstellen im Paket 'java.util.function'. – Jesper
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
Eine Funktion mit 10 Parametern sollte wahrscheinlich eine Klasse haben, um diese Werte zu umbrechen. –